Как получить пиксельный RGB от ByteBuffer с RGB_565 на Android - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть ByteBuffer, который содержит пиксели в формате RGB_565. ByteBuffer имеет размер 320x200 * 2. Каждый пиксель хранится в двух байтах.

Я получаю первое байтовое местоположение для каждого пикселя с (y * 320) + x.

Пожалуйста, как я могу получить RGB из этих двух байтов и преобразовать его в цвет Android?

Я пытался преобразовать этот пост , но без удачи

Вот как выглядит мой код, но он дает неправильные цвета.

РЕДАКТИРОВАТЬ: Спасибо, друзья, я нашел это. Я сделал две ошибки. Сначала был исправлен Пол, благодаря ему я получил правильную позицию индекса. Затем я проиндексировал 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);
}

большое спасибо

...