Vou postar o código, talvez ajude.
apenas quero que quando clicar no botao ‘limpar’ retorne a imagem anterior.
package br.com.supero.swing.webcam;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import br.com.supero.aplicacao.config.Aplicacao;
import br.com.supero.base.domain.BaseDTO;
import br.com.supero.base.exception.GenericBusinessException;
import br.com.supero.genericservice.service.CrudService;
import br.com.supero.swing.grid.GridBase;
import br.com.supero.swing.outros.TelaSwingUtil;
import br.com.supero.swing.util.ImagemUtil;
import de.humatic.dsj.CaptureDeviceControls;
import de.humatic.dsj.DSCapture;
import de.humatic.dsj.DSFilterInfo;
import de.humatic.dsj.DSFiltergraph;
import de.humatic.dsj.DSJUtils;
public class CapturaFoto extends JPanel implements
java.beans.PropertyChangeListener {
// Criados fora para possibilitar o ocultamento dos mesmos
private JButton bSalvar;
private JButton bExcluir;
// Criados fora para possibilitar habilitar/desabilitar
private JButton bCapturar;
private JButton bCancelar;
private JButton bRemover;
private JButton bSelecionar;
private JButton bSalvarArquivo;
private TelaSwingUtil telaUtil;
private GridBase gridBase;
@SuppressWarnings("rawtypes")
private CrudService service;
@SuppressWarnings("rawtypes")
private BaseDTO dto;
private Field fieldImagem;
private Field fieldExtensao;
public Field getFieldImagem() {
return fieldImagem;
}
public void setFieldImagem(Field fieldImagem) {
this.fieldImagem = fieldImagem;
}
public Field getFieldExtensao() {
return fieldExtensao;
}
public void setFieldExtensao(Field fieldExtensao) {
this.fieldExtensao = fieldExtensao;
}
public GridBase getGridBase() {
return gridBase;
}
public void setGridBase(GridBase gridBase) {
this.gridBase = gridBase;
}
public TelaSwingUtil getTelaUtil() {
return telaUtil;
}
public void setTelaUtil(TelaSwingUtil telaUtil) {
this.telaUtil = telaUtil;
}
private static final long serialVersionUID = 1407694279192078332L;
private JLabel lbImagem = null;
private BufferedImage imagemOriginal = null;
private boolean pausado = false;
private JDialog fTirarFoto = null;
private String extensao;
private byte[] imageByteArray = null;
private int btnWidth = 20, btnHeight = 20;
private int guiWidth = 320, guiHeight = 240;
private DSCapture graph;
public CapturaFoto() {
new CapturaFoto(guiWidth, guiHeight);
}
@SuppressWarnings("rawtypes")
public CrudService getService() {
return service;
}
@SuppressWarnings("rawtypes")
public void setService(CrudService service) {
this.service = service;
}
@SuppressWarnings("rawtypes")
public BaseDTO getDto() {
return dto;
}
@SuppressWarnings("rawtypes")
public void setDto(BaseDTO dto) {
this.dto = dto;
}
public CapturaFoto(int width, int height) {
if (height == 0 || width == 0) {
height = guiHeight;
width = guiWidth;
}
this.guiWidth = width;
this.guiHeight = height;
this.setLayout(new GridBagLayout());
lbImagem = new JLabel();
Dimension dim = new Dimension(this.guiWidth, this.guiHeight);
lbImagem.setPreferredSize(dim);
lbImagem.setSize(dim);
lbImagem.setBorder(BorderFactory.createBevelBorder(2));
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.fill = GridBagConstraints.BOTH;
gbc_panel.gridx = 0;
gbc_panel.gridy = 1;
gbc_panel.gridwidth = 2;
this.add(lbImagem, gbc_panel);
adicionaBotoesService();
this.adicionaBotoes();
setSemImagem();
}
public void desabilitaBotoes() {
bCapturar.setEnabled(false);
bCancelar.setEnabled(false);
bRemover.setEnabled(false);
bSelecionar.setEnabled(false);
bSalvarArquivo.setEnabled(false);
}
public void habilitaBotoes(){
bCapturar.setEnabled(true);
bCancelar.setEnabled(true);
bRemover.setEnabled(true);
bSelecionar.setEnabled(true);
bSalvarArquivo.setEnabled(true);
}
/**
* Habilita os botões do
*/
public void modoService(){
if (bSalvar != null && bExcluir != null){
bSalvar.setVisible(true);
bExcluir.setVisible(true);
}
}
/**
* Adiciona os botões utilizados para trabalhar com o CrudService
*/
private void adicionaBotoesService(){
bSalvar = new JButton();
bSalvar.setVisible(false);
bSalvar.setSize(new Dimension(btnWidth, btnHeight));
bSalvar.setIcon(ImagemUtil.criaImagem(
new Dimension(btnWidth, btnHeight), "/selecionar.png", true));
bSalvar.addActionListener(new ActionListener() {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
if (getService() != null && getDto() != null){
try {
if (getFieldImagem() != null){
getFieldImagem().set(dto, getImageByteArray());
}
if (getFieldExtensao() != null){
getFieldExtensao().set(dto, getExtensao());
}
} catch (Exception e1) {
throw new GenericBusinessException("Não foi possivel salvar imagem.");
}
try {
getService().save(dto);
} catch (GenericBusinessException gbe) {
JPanel jPanel = (JPanel) telaUtil.getObjetos().get("this");
telaUtil.mensagem(jPanel, gbe.getLocalizedMessage());
} finally {
getGridBase().carregarDados();
}
}
}
});
GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
gbc_btnNewButton.anchor = GridBagConstraints.WEST;
gbc_btnNewButton.insets = new Insets(0, 0, 5, 0);
gbc_btnNewButton.gridx = 0;
gbc_btnNewButton.gridy = 0;
this.add(bSalvar, gbc_btnNewButton);
bExcluir = new JButton();
bExcluir.setVisible(false);
bExcluir.setSize(new Dimension(btnWidth, btnHeight));
bExcluir.setIcon(ImagemUtil.criaImagem(new Dimension(btnWidth,
btnHeight), "/excluir.png", true));
bExcluir.addActionListener(new ActionListener() {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
if (getService() != null && getDto() != null){
try {
getService().remove(dto);
setSemImagem();
desabilitaBotoes();
} catch (GenericBusinessException gbe) {
JPanel jPanel = (JPanel) telaUtil.getObjetos().get("this");
telaUtil.mensagem(jPanel, gbe.getMessage());
} finally {
getGridBase().carregarDados();
}
}
}
});
GridBagConstraints gbc_btnExcluir = new GridBagConstraints();
gbc_btnExcluir.anchor = GridBagConstraints.WEST;
gbc_btnExcluir.insets = new Insets(0, 0, 5, 0);
gbc_btnExcluir.gridx = 1;
gbc_btnExcluir.gridy = 0;
this.add(bExcluir, gbc_btnExcluir);
}
private void adicionaBotoes() {
final JPanel p = new JPanel();
p.setLayout(new GridLayout(0, 1));
bCapturar = new JButton();
bCapturar.setSize(new Dimension(btnWidth, btnHeight));
bCapturar.setIcon(ImagemUtil.criaImagem(new Dimension(btnWidth,
btnHeight), "/capturarImagem.png", true));
bCapturar.setToolTipText("Capturar nova imagem");
bCapturar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
capturarImagem();
}
});
p.add(bCapturar);
bCancelar = new JButton();
bCancelar.setSize(new Dimension(btnWidth, btnHeight));
bCancelar.setIcon(ImagemUtil.criaImagem(new Dimension(btnWidth,
btnHeight), "/limpar.png", true));
bCancelar.setToolTipText("Cancela a alteração da imagem");
bCancelar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setSemImagem();
}
});
p.add(bCancelar);
bRemover = new JButton();
bRemover.setSize(new Dimension(btnWidth, btnHeight));
bRemover.setIcon(ImagemUtil.criaImagem(new Dimension(btnWidth,
btnHeight), "/excluir.png", true));
bRemover.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setSemImagem();
}
});
bRemover.setToolTipText("Remove a imagem");
p.add(bRemover);
bSelecionar = new JButton();
bSelecionar.setIcon(ImagemUtil.criaImagem(new Dimension(btnWidth,
btnHeight), "/selecionarImagem.png", true));
bSelecionar.setSize(new Dimension(btnWidth, btnHeight));
bSelecionar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(p);
if (returnVal == JFileChooser.APPROVE_OPTION) {
BufferedImage bi = null;
File f = fc.getSelectedFile();
try {
setExtensao(f.getName()
.substring(f.getName().lastIndexOf(".") + 1)
.toLowerCase());
bi = ImageIO.read(f);
try {
int height = Aplicacao.getInstance().getConfig().getAlturaPadraoImagemCaptura();
int width = Aplicacao.getInstance().getConfig().getLarguraPadraoImagemCaptura();
if (height == 0 || width == 0) {
height = guiHeight;
width = guiWidth;
}
float[] prop = ImagemUtil.calculaProporcaoImagem(width, height, bi.getWidth(), bi.getHeight());
bi = ImagemUtil.resize(Math.round(prop[0]), Math.round(prop[1]), bi);
} catch (IOException e1) {
}
} catch (IOException ex) {
ex.printStackTrace();
}
if (bi != null) {
setImagem(bi);
} else {
// carregaArquivo(f);
}
}
}
});
bSelecionar
.setToolTipText("Selecionar um arquivo para usar como imagem");
p.add(bSelecionar);
bSalvarArquivo = new JButton();
bSalvarArquivo.setIcon(ImagemUtil.criaImagem(new Dimension(btnWidth,
btnHeight), "/salvarArquivo.png", true));
bSalvarArquivo.setSize(new Dimension(btnWidth, btnHeight));
bSalvarArquivo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new JFileChooser();
int returnVal = fc.showSaveDialog(p);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
File f = fc.getSelectedFile();
String nome = f.getAbsolutePath();
String extensao = getExtensao() == null ? "png" : getExtensao();
setExtensao(extensao);
nome = nome.substring(0, (nome.indexOf(".") == -1 ? nome.length() : nome.indexOf("."))) + "." + extensao;
f = new File(nome);
if (getImageByteArray() != null) {
FileOutputStream fos = new FileOutputStream(f);
fos.write(getImageByteArray());
fos.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
bSalvarArquivo.setToolTipText("Salvar em arquivo");
p.add(bSalvarArquivo);
GridBagConstraints gbc_panelBotoes = new GridBagConstraints();
gbc_panelBotoes.anchor = GridBagConstraints.EAST;
gbc_panelBotoes.insets = new Insets(0, 0, 5, 0);
gbc_panelBotoes.gridx = 2;
gbc_panelBotoes.gridy = 1;
this.add(p, gbc_panelBotoes);
bCancelar.setFocusable(false);
bCapturar.setFocusable(false);
bExcluir.setFocusable(false);
bRemover.setFocusable(false);
bSalvar.setFocusable(false);
bSalvarArquivo.setFocusable(false);
bSelecionar.setFocusable(false);
}
/**
* Carrega canvas com a opção sem imagem.
*/
public void setSemImagem() {
setImageByteArray(null);
this.lbImagem.setIcon(ImagemUtil.criaImagem(new Dimension(
this.guiWidth, this.guiHeight), "/semImagem.jpg", true));
carregarImagem();
}
public void capturarImagem() {
fTirarFoto = new JDialog();
fTirarFoto.setModal(true);
fTirarFoto.setTitle("Capturar Imagem");
fTirarFoto.setLayout(new BorderLayout());
fTirarFoto.setSize(new Dimension(300, 300));
fTirarFoto.setPreferredSize(new Dimension(300, 300));
fTirarFoto.setAlwaysOnTop(true);
fTirarFoto.setLocationRelativeTo(null);
pausado = false;
/**
* queryDevices returns video device infos in slot 0 / audio device
* infos in slot 1
**/
DSFilterInfo[][] dsi = DSCapture.queryDevices();
/** this sample only uses video **/
graph = new DSCapture(DSFiltergraph.DD7, dsi[0][0], false,
DSFilterInfo.doNotRender(), this);
fTirarFoto.add(java.awt.BorderLayout.CENTER, graph.asComponent());
JPanel p = new JPanel();
p.setLayout(new GridLayout(1, 0));
final String tirarFoto = "Tirar Foto";
final String novaFoto = "Nova Foto";
final javax.swing.JButton bUsar = new javax.swing.JButton(
ImagemUtil.criaImagem(new Dimension(btnWidth, btnHeight),
"/selecionar.png", true));
bUsar.setSize(new Dimension(btnWidth, btnHeight));
bUsar.setEnabled(false);
final javax.swing.JButton bCapturar = new javax.swing.JButton(
ImagemUtil.criaImagem(new Dimension(btnWidth, btnHeight),
"/tirarFoto.png", true));
bCapturar.setToolTipText(tirarFoto);
bCapturar.setSize(new Dimension(btnWidth, btnHeight));
bCapturar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (graph.getState() == DSCapture.PREVIEW) {
if (!pausado) {
graph.pause();
bCapturar.setToolTipText(novaFoto);
pausado = true;
} else {
graph.play();
bCapturar.setToolTipText(tirarFoto);
pausado = false;
}
bUsar.setEnabled(pausado);
}
}
});
p.add(bCapturar);
bUsar.setToolTipText("Utilizar Foto");
bUsar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
BufferedImage bi = graph.getImage();
try {
int height = Aplicacao.getInstance().getConfig().getAlturaPadraoImagemCaptura();
int width = Aplicacao.getInstance().getConfig().getLarguraPadraoImagemCaptura();
if (height == 0 || width == 0) {
height = guiHeight;
width = guiWidth;
}
float[] prop = ImagemUtil.calculaProporcaoImagem(width, height, bi.getWidth(), bi.getHeight());
bi = ImagemUtil.resize(Math.round(prop[0]), Math.round(prop[1]), bi);
} catch (IOException e1) {
}
setImagem(bi);
carregarImagem();
fTirarFoto.dispose();
graph.dispose();
}
});
p.add(bUsar);
final javax.swing.JButton bFechar = new javax.swing.JButton(
ImagemUtil.criaImagem(new Dimension(btnWidth, btnHeight),
"/fechar.png", true));
bFechar.setSize(new Dimension(btnWidth, btnHeight));
bFechar.setToolTipText("Fechar janela");
bFechar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
fTirarFoto.dispose();
graph.dispose();
}
});
p.add(bFechar);
fTirarFoto.add(java.awt.BorderLayout.NORTH, p);
fTirarFoto
.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
fTirarFoto.setVisible(true);
}
public void propertyChange(java.beans.PropertyChangeEvent pe) {
switch (DSJUtils.getEventType(pe)) {
}
}
public void apresentaDeviceControl() {
javax.swing.JFrame jf = new javax.swing.JFrame("Device control");
jf.setLayout(new java.awt.GridLayout(0, 1));
if (graph.getActiveVideoDevice() != null
&& graph.getActiveVideoDevice().getControls() != null) {
for (int i = CaptureDeviceControls.BRIGHTNESS; i < CaptureDeviceControls.LT_FINDFACE; i++)
try {
jf.add(graph.getActiveVideoDevice().getControls()
.getController(i, 0, true));
} catch (Exception ex) {
}
}
if (graph.getActiveAudioDevice() != null)
for (int i = CaptureDeviceControls.MASTER_VOL; i < CaptureDeviceControls.TREBLE; i++)
try {
jf.add(graph.getActiveAudioDevice().getControls()
.getController(i, 0, true));
} catch (Exception ex) {
}
if (jf.getContentPane().getComponentCount() == 0)
return;
jf.pack();
jf.setVisible(true);
}
/**
* Método que carrega uma imagem. Extensão defaut é: jpg
*
* @param imagem
*/
public void setImagem(BufferedImage imagem) {
try {
setImageByteArray(ImagemUtil.BufferedImageToByte(imagem));
} catch (IOException e) {
e.printStackTrace();
}
if (getExtensao() == null || getExtensao().equals("")) {
this.setExtensao("jpg");
}
carregarImagem();
}
/**
* Recebe o array de bytes da imagem e realiza o recarregamento do canvas
*
* @param imageByteArray
*/
public void setImageByteArray(byte[] imageByteArray) {
this.imageByteArray = imageByteArray;
carregarImagem();
}
/**
* Retorna o array de bytes da imagem armazenada
*
* @return
*/
public byte[] getImageByteArray() {
return imageByteArray;
}
/**
* Carrega a imagem armazenada
*/
private void carregarImagem() {
if (getImageByteArray() != null) {
Image img = ImagemUtil.byteToImage(getImageByteArray());
Icon i = new ImageIcon(img);
this.lbImagem.setIcon(i);
}
lbImagem.repaint();
}
/**
* Recupera a extensão do arquivo em questão.
*
* @return
*/
public String getExtensao() {
return extensao;
}
/**
* Atribui a extensão ao arquivo. deve ser chamado sempre após o método
* setBytes.
*
* @param extensao
*/
public void setExtensao(String extensao) {
this.extensao = extensao;
}
}
Sou iniciante em java, gostaria de saber se tenho que criar um novo parametro,
mais um public void… etc.