1

PNGからバイトを抽出しようとしていますが、奇妙な結果が得られています。

これが私のextractbyteメソッドです:

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[]をループします。

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

この出力は私には正しく見えません。出力は次のようになるはずです(アルファチャンネルは空白のままにしました):

255
0
0

0
255
0

0
0
255

255
0
255

問題が何であるかについて何か考えはありますか?

4

2 に答える 2

3

Javaバイトは署名されているため、0〜255の範囲で255を期待する場合、Javaは-128〜127の範囲を使用しているため、署名されていない255を署名付き-1として出力します。

于 2013-01-22T03:30:16.400 に答える
2

BufferedImageのタイプは何ですか?TYPE_4BYTE_ABGRだと思います。Javaでは値255のバイトが-1になるため、出力は正しいように見えます。-1、0、0、-1 =アルファ:255、青:0、緑:0、赤255。

于 2013-01-22T03:51:19.047 に答える