将r,g,b值转换为一个像素值

时间:2012-02-28 10:56:18

标签: java image-processing pixel rgb bufferedimage

我正在尝试使用方法getRGB()访问图像的像素。我用于此项的图像是8位图像,即每个像素由8位表示,因此可能的值为0-255。 我使用的图像是png 8位图像因此类型' type_byte_indexed'

if (type == BufferedImage.TYPE_BYTE_INDEXED) { 
    System.out.println("type.byte.indexed");
    System.out.print(h+"   "+w);    

    sourceImage.getRGB(0, 0, w, h, rgbs, 0, w); //rgbs is integer array

    for (i = 0; i <10; i++) {
        System.out.print("   "+rgbs[i]);  
     }
    System.out.println("rgbs len: " + rgbs.length); 
}

for循环的输出是ilke:

-12048344   -12174804   -12048344   -12174804   -12174804 .......

我从中获取r,g,b组件并存储在数组中:

    Color c=new Color(rgbs[i]);
    r=c.getRed();
    g=c.getGreen();
    b=c.getBlue();

现在我如何再次组合这些值,以便我可以使用setRGB方法?与24位图像一样,我们可以使用

int rgb=65536*pixel[i]+256*pixel[i+1]+pixel[i+2];

1 个答案:

答案 0 :(得分:4)

documentation明确指出返回的值是ARGB格式:

  

返回默认RGB颜色模型(TYPE_INT_ARGB)和默认sRGB颜色空间中的整数像素数组

您可以使用

访问底层缓冲区(包含索引像素)
byte[] data=((DataBufferByte)bufferedImage.getRaster().getDataBuffer()).getData(0);