ByteBuffer存储来自BufferedImage.getRGB()NOT 1和0的-1和0值

时间:2014-10-10 12:00:08

标签: byte return-value bytebuffer argb image-comparison

我目前正在开发一个程序,用于存储来自两个图像的RGB信息以进行比较。

我用paint.net创建了两个示例图像。 两者都是16x16,一个是蓝色,另一个是RED。 我将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

这不会影响我的编码, 但我有更多的理解问题。

0 个答案:

没有答案