Я пытаюсь преобразовать RGB565 в изображение в градациях серого.
Я использовал приведенный ниже код для преобразования. У меня есть пиксель rgb565. Я получаю значения R, G и B и выполняю операцию преобразования. После получения оттенков серого я восстанавливаю 16-битные значения пикселей, в которых R, G и B будут иметь одинаковое значение оттенков серого.
int16_t pixel = *buffer;
int16_t red = ((pixel & 0xF800)>>11);
int16_t green = ((pixel & 0x07E0)>>5);
int16_t blue = (pixel & 0x001F);
int16_t grayscale = (0.2126 * red) + (0.7152 * green) + (0.0722 * blue);
*buffer=(grayscale<<11)+(grayscale<<5)+grayscale;
Здесь я ожидал изображения в оттенках серого. Тем не менее, то, что происходит, ->
Зеленый цвет имеет 6 бит пространства (имеет большую величину). Полученное значение в градациях серого должно быть 5 битов, чтобы я соответствовал RG и B. Тем не менее, выполненный расчет обеспечивает 6-битную шкалу серого, из-за которой я не получаю правильное изображение в градациях серого.
Может ли кто-нибудь мне помочьпреобразовать rgb565 в оттенки серого и сохранить его как 16 бит.