如何在使用setRGB后在java中显示greycale图像?

时间:2012-01-14 16:46:25

标签: java bufferedimage grayscale

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

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

1 个答案:

答案 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);