我正在尝试使用方法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];
答案 0 :(得分:4)
documentation明确指出返回的值是ARGB格式:
返回默认RGB颜色模型(TYPE_INT_ARGB)和默认sRGB颜色空间中的整数像素数组
您可以使用
访问底层缓冲区(包含索引像素)byte[] data=((DataBufferByte)bufferedImage.getRaster().getDataBuffer()).getData(0);