У меня есть значения цвета в шести битах, с двумя битами для красного, зеленого и синего.Таким образом, черный будет представлен как двоичный файл 000000
, красный 110000
, синий 000011
, желтый 111100
и так далее.
Мне нужно преобразовать этот цвет в 24-битное значение RGB, чтобы передать его графическому слою (DirectFB).Поскольку три (двоичное 11) должно стать 255 (0xFF), я использовал следующую формулу с 85 (= 255/3) в качестве коэффициента преобразования.
r = (color_6bit >> 4) * FACTOR;
g = ((color_6bit >> 2) & 0x3) * FACTOR;
b = (color_6bit & 0x3) * FACTOR;
color_32bit = (r << 16)| (g << 8) | b;
Это правильно преобразует цвета (белый [0x3F)-> 0xFFFFFF], красный [0x30 -> 0xFF0000] и т. Д.).
Теперь эти цвета являются текстовыми и фоновыми цветами надписей, которые должны отображаться на телевизоре, и у нас есть тестовые потоки с встроенной цветовой палитрой, встроенной в видео.Когда я рисую на экране восемь битовых цветов, полученных с помощью этой формулы, он не совсем совпадает с эталонным цветом, присутствующим в видео, - он довольно близок, но есть разница.
Я делаюправильное преобразование или существует ли какой-либо стандартный алгоритм для преобразования двухбитовых значений цвета rgb в восьмибитные значения rgb?Может ли DirectFB использовать какое-то другое представление (например, RGB565) для внутреннего использования?
Для чего стоит, когда коэффициент 85 заменяется на 48 (значение, найденное методом проб и ошибок), цвета почти идеально совпадают.