Erro de Utilização de BufferedImage

Bom tenho que fazer um “miniPhotoshop” para um trabalho na faculdade está tudo executando e gerando outras imagens
o trabalho contém contraste,brilho,histograma,or,and,soma de duas imagens …
O problema é que quando ele executa mais de uma operação ao invés de utilizar o o buffer inicial ele utiliza o que foi modificado…
contudo não encontrei onde isso esta acontecendo.

[code]public class MinhaImagem {

private BufferedImage bufferImagem; // buffer da imagem de entrada
private ImageIcon imageIcon;
private Image imagem;
private int width;
private int height;

private BufferedImage imagemGerada; // buffer da imagem de saída
private BufferedImage imagemcinza;
private BufferedImage imagemBrilho;
private BufferedImage imagemContraste;
private BufferedImage imagemNegativo;
private BufferedImage imagemAdicao;
private BufferedImage imagemSubtracao;

private JFreeChart histograma; // histograma
private int[][] frequencia = new int[256][3]; // vetor de 256

/*metodos set /get */

/**
* Método de conversão da imagem colorida no padrão RGB (JPEG e GIF) para
* escala de cinza: L = 0.299R + 0.587G + 0.114*B -> cálculo da luminância
*/
public void conversaoRGBEscalaCinza() {

	BufferedImage escalaCinza = getBufferImagem(); // buffer para dados da imagem
	int red, green, blue; // armazenar os valores do padrão RGB
	int luminancia; // armazenar o cálculo da luminância
	int altura = getHeight();
	int largura = getWidth();

	// faz a conversão
	for (int c = 0; c < (altura); c++) {    //(altura)
		for (int l = 0; l < (largura); l++) { //(largura)
			Color cor = new Color(escalaCinza.getRGB(l, c));
			red = cor.getRed();
			green = cor.getGreen();
			blue = cor.getBlue();

			// cálculo da luminância L
			luminancia = (int) ((0.299 * red) + (0.587 * green) + (0.114 * blue));

			Color cinza = new Color(luminancia, luminancia, luminancia);
			escalaCinza.setRGB(l, c, cinza.getRGB());
		}
	}
	this.imagemcinza = escalaCinza;
}[/code]

bom esse é apenas uma função
já na interface principal ele guarda guarda a imagem

[code]private void botaoCinzaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

    imagem.conversaoRGBEscalaCinza();
			caminho = caminho.concat("escalaCinza.jpg");

			InterfaceImagem ie = new InterfaceImagem(new ImageIcon
					(imagem.getImagemcinza()));
                       
}  [/code]

porém ele sempre utiliza o buffer da ultima imagem gerada.
Alguém poderia me ajudar :?:

        this.imagemcinza = escalaCinza;  

não copia a imagem, apenas cria uma nova referência. Você precisa criar novos BufferedImage().