我目前正在开发一个程序,该程序存储来自两个图像的 RGB 信息以比较它们。
我用paint.net 创建了两个示例图像。两者都是 16x16,一个是蓝色的,另一个是红色的。我将paint.net 中的值设置为(255, 0,0),红色的RGB 值和蓝色图像中的(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吗?
这不是对我的编码产生负面影响的问题,而是我有更多的理解问题。