【问题标题】:Loading 8-bit grayscale image using ImageIO使用 ImageIO 加载 8 位灰度图像
【发布时间】:2014-05-02 12:38:54
【问题描述】:

我想使用 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 值固定在 @ 987654332@.

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

【问题讨论】:

    标签: java image javax.imageio


    【解决方案1】:

    使用image.getRGB(x,y) 获得的值是一个int,由红色、绿色和蓝色三个颜色分量组成,每个分量都有 8 位。当图像不包含透明度时,Alpha 值固定为 255。

    当图像为灰度图像时,此 RGB 值的红、绿、蓝分量将全部相等。所以你可以获得“灰色”值

    int rgb = image.getRGB(x,y);
    
    // This yields a value between 0 (black)
    // and 255 (white) :
    int gray = rgb & 0xFF; 
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-27
        • 2014-10-29
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多