【发布时间】:2012-01-15 01:10:28
【问题描述】:
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]);
像素值的输出对于原始像素和新像素都是正确的,但我无法查看新图像,它显示的是旧图像,即显示的是原始图像而不是更改后的图像。
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
-
您在第 2 行中分配了一个大的
BufferedImage,但随后将其丢弃并替换为对ImageIO.read()的调用。为了记忆,可能不想这样做。 -
是的,谢谢...但是我怎样才能将这个更改的像素显示为图像??
标签: java bufferedimage grayscale