-1

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]);

像素值的输出对于原始像素和新像素都是正确的,但我无法查看新图像,它显示的是旧图像,即显示原始图像而不是更改后的图像。

4

1 回答 1

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);
于 2012-01-14T16:56:16.263 回答