Java 试图从PNG图像中提取字节
我试图从PNG中提取字节,得到一些奇怪的结果 以下是我的提取字节方法:Java 试图从PNG图像中提取字节,java,image,png,bytearray,bufferedimage,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 DataBuffe
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通道留空):
知道问题出在哪里吗?Java字节是有符号的,所以当您希望0-255范围内有255个字节时,Java使用的是-128到127范围,因此将无符号的255打印为有符号的-1。Java字节是有符号的,所以当您希望0-255范围内有255个字节时,java使用的是-128到127范围,因此将无符号255打印为有符号-1。缓冲区图像的类型是什么?我怀疑是4BYTE型ABGR。 由于值为255的字节在Java中会变成-1,因此输出似乎是正确的。
-1,0,0,-1=alpha:255,蓝色:0,绿色:0,红色255。缓冲区图像的类型是什么?我怀疑是4BYTE型ABGR。 由于值为255的字节在Java中会变成-1,因此输出似乎是正确的。 -1,0,0,-1=alpha:255,蓝色:0,绿色:0,红色255。+1对于记住(除了有符号的Java字节)BuffereImage支持严重的内部表示,不应假设+1对于记住(除了有符号的Java字节)BuffereImage支持严重的内部表示,我们不应该这样认为。
255
0
0
0
255
0
0
0
255
255
0
255