M 在做一些图像处理程序,遇到了显示灰度图像的问题。我所做的是,我使用 getRGB 提取像素值,然后尝试更改这些像素值。但是在更改这些像素值之后,我仍然得到之前缓冲的相同图像。我的部分代码如下: -
int [] rgbArray=new int[width*height];
BufferedImage buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
buffer = ImageIO.read(new File(file));
//Before changing the pixel values
buffer.getRGB(0, 0, width, height, rgbArray , 0,width );
int a = (0xff000000 & rgbArray[0]) >>> 24;
int r = (0x00ff0000 & rgbArray[0]) >> 16;
int g = (0x0000ff00 & rgbArray[0]) >> 8;
int b = (0x000000ff & rgbArray[0]);
System.out.println("a " + a + " r " + r + " g " + g + " b " + b);
System.out.println("rgbArray["+0+"] = "+ rgbArray[0]);
for(int i = 0 ; i<width*height; i++)
{
rgbArray[0]=0x808080; //Changing pixel values to grey
}
buffer.setRGB(0, 0, width, height, rgbArray , 0,width);
//After changing the pixel values
buffer.getRGB(0, 0, width, height, rgbArray , 0,width );
a = (0xff000000 & rgbArray[0]) >>> 24;
r = (0x00ff0000 & rgbArray[0]) >> 16;
g = (0x0000ff00 & rgbArray[0]) >> 8;
b = (0x000000ff & rgbArray[0]);
System.out.println("a " + a + " r " + r + " g " + g + " b " + b);
System.out.println("rgbArray["+0+"] = "+ rgbArray[0]);
像素值的输出对于原始像素和新像素都是正确的,但我无法查看新图像,它显示的是旧图像,即显示原始图像而不是更改后的图像。