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]);
像素值的输出对于原始像素和新像素都是正确的,但是我无法查看新图像,它显示的是旧的原始图像,而不是更改的图像。
答案 0 :(得分:1)
rgbArray[0]=0x808080; //Changing pixel values to grey
你只有第一个像素变为灰色。你可能想做什么:
rgbArray[i]=0x808080; //Changing pixel values to grey
会将每个像素更改为灰色。
//编辑:
当然,然后每个像素都完全相同(灰色),这可以用更少的代码来完成,例如:
Graphics2D g2 = buff.createGraphics();
g2.setColor(Color.grey);
g2.fillRect(0, 0, buff.getWidth(), buff.getHeight());
g2.dispose();
如果您想要黑白图片而不是彩色图片,请尝试:
BufferedImageOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
buffer = op.filter(buffer, null);