BufferedImage:红色显示为灰色

时间:2011-10-08 18:16:25

标签: java bufferedimage

我正在用java编写一个小程序,它将在图像上绘制路径。为此,我有以下代码

while(!path.isEmpty())
{
    Position p = path.poll();
    image.setRGB(p.getX(),p.getY(),Color.red.getRGB());
}

其中path是一个对象的队列,其中X和Y坐标和图像是标准的BufferedImage(来自ImageIO.read)。此代码仅用于在队列中的图像的每个像素上绘制红色像素。而不是红色,当我把这个图像写入文件时,我得到一个灰色。

The diagonal gray line SHOULD be Red...

Color.red.getRGB的返回值是0xFFFF0000。在我将其设置为红色后对像素执行getRGB时,我返回0xFF7F7F7F。

我是Java的新手,不知道为什么会这样。任何帮助将不胜感激。

如果它有所不同,则图像来自.bmp文件。

1 个答案:

答案 0 :(得分:2)

可能是您正在使用灰度类型的BufferedImage,或者将这些sRGB值映射为灰色的类型。

通常,您有两种可能性之一:

  1. 如果您要显式初始化BufferedImage,请检查imageType或ColorModel参数depending on the constructor you're using
  2. 如果您是通过某种工厂方法或其他方式间接初始化图像对象,请检查 getType()方法的值。这些值列在JavaDoc中。如果这是一个“正确”值(RGB类型之一),请查看 getColorModel() 的返回。
  3. 由于你是从.bmp文件加载图像,第二个可能是你的情况。

    有关颜色值转换问题的信息,请参阅herehere

    通常,如果您只想了解Java中的图像处理,我建议使用第二个BufferedImage构造函数和* TYPE_INT_ARGB *作为启动器的类型,并从中扩展您的代码。根据我对早期Java时代的记忆,学习图像加载可能有点棘手:)。

    另外,您可能需要阅读official Java2D tutorial。这是对该主题的一个很好的介绍。