我有ByteBuffer,其中包含RGB_565格式的像素。 ByteBuffer的大小为320x200 * 2。每个像素都存储在两个字节中。
我正在使用(y * 320)+ x获得每个像素的第一个字节位置。
请问如何从这两个字节中获取RGB并将其转换为android颜色?
我尝试转换此post,但没有运气
这是我的代码的外观,但是颜色错误。
编辑:谢谢朋友,我找到了它。我犯了两个错误。首先是由保罗修复的,感谢他,我获得了正确的索引位置。然后我索引了buffer.array()而不是buffer.get(index)。第一种方法是给我纯字节[],开头是一些额外的字节。这使索引编制错误。
这是正确的功能,也许将来有人会发现它有用
public int getPixel(int x, int y) {
int index = ((y * width) + x) * 2;
//wrong (or add arrayOffset to index)
//byte[] bytes = buffer.array();
//int rgb = bytes[index + 1] * 256 + bytes[index];
//correct
int rgb = buffer.get(index + 1) * 256 + buffer.get(index);
int r = rgb;
r &= 0xF800; // 1111 1000 0000 0000
r >>= 11; // 0001 1111
r *= (255/31.); // Convert from 31 max to 255 max
int g = rgb;
g &= 0x7E0; // 0000 0111 1110 0000
g >>= 5; // 0011 1111
g *= (255/63.); // Convert from 63 max to 255 max
int b = rgb;
b &= 0x1F; // 0000 0000 0001 1111
//g >>= 0; // 0001 1111
b *= (255/31.); // Convert from 31 max to 255 max
return Color.rgb(r, g, b);
}
非常感谢