У меня есть 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);
}
большое спасибо