如何在Android上使用RGB_565从ByteBuffer获取像素的RGB

时间:2018-09-03 09:25:11

标签: android rgb bytebuffer android-color

我有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);
}

非常感谢

0 个答案:

没有答案