试图从PNG图像中提取字节

时间:2013-01-22 03:27:35

标签: java image png bytearray bufferedimage

我正在尝试从PNG中提取字节,并得到一些奇怪的结果。

这是我的提取字节方法:

public static byte[] extractBytes (String ImageName) throws IOException {
     // open image
     File imgPath = new File(ImageName);
     BufferedImage bufferedImage = ImageIO.read(imgPath);

     // get DataBufferBytes from Raster
     WritableRaster raster = bufferedImage.getRaster();
     DataBufferByte data   = (DataBufferByte) raster.getDataBuffer();

     return ( data.getData() );
}

这里是我调用函数并循环生成的字节[]:

byte[] bytes = extractBytes("colorstrip.png");

for (int x : bytes) {
    System.out.println(x);
}

我一直在4x1图像上测试此代码,该图像只包含红色像素,蓝色像素,绿色像素和紫色像素。这是输出:

-1
0
0
-1
-1
0
-1
0
-1
-1
0
0
-1
-1
0
-1

此输出对我来说不正确。我相信输出应该看起来像这样(我把alpha通道留空了):

255
0
0

0
255
0

0
0
255

255
0
255

知道问题是什么吗?

2 个答案:

答案 0 :(得分:3)

Java字节是有符号的,所以当你期望在0-255范围内有255个字节时,java使用-128到127范围,因此将无符号255打印为带符号-1。

答案 1 :(得分:2)

BufferedImage的类型是什么?我怀疑它是TYPE_4BYTE_ABGR。 由于值为255的字节在Java中将变为-1,因此输出似乎是正确的。 -1,0,0,-1 = alpha:255,蓝色:0,绿色:0,红色255。