0

私は現在、2 つの画像から RGB 情報を保存して比較するプログラムに取り組んでいます。

paint.net で 2 つのサンプル イメージを作成しました。どちらも 16x16 で、一方は青、もう一方は赤です。paint.net の値を RED の RGB 値で (255, 0 ,0) に、青のイメージで (0,0,255) に設定しました。

それを ByteBuffer にロードして、その中を見たとき。

                // Buffer for texture data
                ByteBuffer res = BufferUtils.makeByteBufferT4(w * h);

                // Convert pixel format
                for (int y = 0; y != h; y++) {
                    for (int x = 0; x != w; x++) {
                        int pp = bi.getRGB(x, y);
                        byte a = (byte) ((pp & 0xff000000) >> 24);
                        byte r = (byte) ((pp & 0x00ff0000) >> 16);
                        byte g = (byte) ((pp & 0x0000ff00) >> 8);
                        byte b = (byte) (pp & 0x000000ff);
                        res.put((y * w + x) * 4 + 0, r);
                        res.put((y * w + x) * 4 + 1, g);
                        res.put((y * w + x) * 4 + 2, b);
                        res.put((y * w + x) * 4 + 3, a);
                    }
                }

    public static ByteBuffer makeByteBufferT4(int length){
            // As "int" in java has 4 bytes we have to multiply our length with 4 for every single int value
            ByteBuffer res = null;
            return res = ByteBuffer.allocateDirect(length * 4);
        }

res.get(0) を介して、値として1を期待していましたが、 -1を取得 しました。期待に反して値 -1 が格納されていることを認識しました。期待値は 1 でした。

値1を格納すべきではないのはなぜですか?

これは私のコーディングに悪影響を与える問題ではありませんが、理解の問題です。

4

0 に答える 0