Преобразование двухбитного цвета в восьмибитный - PullRequest
3 голосов
/ 12 мая 2011

У меня есть значения цвета в шести битах, с двумя битами для красного, зеленого и синего.Таким образом, черный будет представлен как двоичный файл 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 (значение, найденное методом проб и ошибок), цвета почти идеально совпадают.

1 Ответ

5 голосов
/ 12 мая 2011

Единственный известный мне стандарт - это EGA - есть ссылка на wikipedia .

Для 6 бит это очень маленький пробел - всего 64 значения.Самый быстрый способ выполнить преобразование с точки зрения времени процессора и памяти - это почти наверняка просто поиск значения в массиве размером 64. Особенно, если у вас есть тестовые данные, это действительно просто - просто поместите правильные 64 значения изтестовые данные в массиве.Таким образом, вам не нужно беспокоиться о том, является ли он стандартом - стандарт как раз и работает для этой системы.

...