Variavel receber Imagem

Ola,

gostaria de algus exemplos de como faço para salvar uma imagem
numa variavel e depois chamá-la novamente.

Tenho uma aplicacao que tira fotos com webcam, quero salvar essa imagem,
pois tenho um botao de limpar e quando eu inserir uma nova imagem, e clicar
no botao limpar, deverá voltar a imagem anterior.

Agradeco a atencoa.

você está armazenando a imagem no banco de dados ou o caminho da imagem?

Estou armazenando no banco de dados.

Já desenvolveu algo a respeito?

Acho que se você estiver armazenando no banco de dados, cria dois campos, um imagem atual e outra imagem antiga.

Quando você trocar de imagem o caminho da imagem vai ser gravado no banco no campo imagem atual, e a imagem que estava antes no campo atual

pega, da um update e coloque esse caminho na imagem antiga. Não serviria?

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.