Ecco la mia versione della funzione red().
public void red(BufferedImage source)
{
BufferedImage grayInput = new BufferedImage(source.getWidth(),source.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
BufferedImage grayOutput = new BufferedImage(source.getWidth(),source.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
BufferedImage finalImage = new BufferedImage(source.getWidth(),source.getHeight(),source.getType());
Graphics g = grayOutput.getGraphics();
g.drawImage(source,0,0,source.getWidth(),source.getHeight(),null);
int[] red = source.getRaster().getSamples(0,0,source.getWidth(),source.getHeight(),0,(int[])(null));
int[] green = source.getRaster().getSamples(0,0,source.getWidth(),source.getHeight(),1,(int[])(null));
int[] blue = source.getRaster().getSamples(0,0,source.getWidth(),source.getHeight(),2,(int[])(null));
WritableRaster redRaster = grayInput.getRaster();
WritableRaster outputRaster = grayOutput.getRaster();
WritableRaster finalRaster = finalImage.getRaster();
redRaster.setSamples(0,0,source.getWidth(),source.getHeight(),0,red);
float[] kernel = new float [9];
kernel[0] = 1F/10; kernel[1] = 1F/10; kernel[2] = 1F/10;
kernel[3] = 1F/10; kernel[4] = 1F; kernel[5] = 1F/10;
kernel[6] = 1F/10; kernel[7] = 1F/10; kernel[8] = 1F/10;
Kernel convolutionKernel = new Kernel(3,3,kernel);
ConvolveOp RedConvolve = new ConvolveOp(convolutionKernel);
RedConvolve.filter(redRaster,outputRaster);
int[] convolvedRed = outputRaster.getSamples(0,0,source.getWidth(),source.getHeight(),0,(int [])(null));
finalRaster.setSamples(0,0,source.getWidth(),source.getHeight(),0,convolvedRed);
finalRaster.setSamples(0,0,source.getWidth(),source.getHeight(),1,green);
finalRaster.setSamples(0,0,source.getWidth(),source.getHeight(),2,blue);
OutputFrame outFrame2 = new OutputFrame(finalImage);
}
Ah...funziona :-)