使用ImageIO加载8位灰度图像

时间:2014-05-02 12:38:54

标签: java image javax.imageio

我想使用grayscaleImage = ImageIO.read(grayscaleFile)加载8位灰度图像。但是,BufferedImage类(grayscaleImage的类型)仅提供方法getRGB(int x, int y)。那么,color.getRed()color.getGreen()color.getBlue()color.getAlpha()的值是什么

Color color = new Color(grayscaleImage.getRGB(x, y), true);

从第一次观察看,似乎存储在像素(x,y)的图像文件中的8位值传播到color的红色,绿色和蓝色分量,而它的alpha值固定为255

有人可以证实这一观察结果吗?

2 个答案:

答案 0 :(得分:3)

image.getRGB(x,y)获得的值是int,由三个颜色分量Red,Green和Blue组成,每个颜色分量为8位。当图像不包含透明度时,Alpha值固定为255。

当图像是灰度图像时,此RGB值的红色,绿色和蓝色分量将全部相等。因此,您可以获得“灰色”值

int rgb = image.getRGB(x,y);

// This yields a value between 0 (black)
// and 255 (white) :
int gray = rgb & 0xFF; 

答案 1 :(得分:0)

没错。灰色只是三种颜色成分(红色,绿色,蓝色)中具有相同值的颜色。虽然您只需要一个值来确定颜色(因为红色,绿色和蓝色组件具有相同的值),但在图像加载时,该值将分配给所有三个颜色组件。

如果获得图像的每个像素的值,则必须为同一像素x,y的三个颜色分量获得相同的值。对于alpha分量,因为它是灰度图像,是正确的,它是255。