В данный момент я работаю над проектом на экране с черными, белыми и прозрачными пикселями. (Это проект с открытым исходным кодом: http://code.google.com/p/super-osd;, который показывает OSD с набором пикселей 256x192 в процессе разработки, но я перехожу на OSD белого / черного / прозрачного цвета.)
Поскольку каждый пиксель является черным, белым или прозрачным, я могу использовать простую кодировку состояния 2 бит / 4, где я сохраняю выделение черно-белого и выделение прозрачного. Таким образом, у меня была бы таблица истинности как это (x = не волнует):
B/W T
x 0 pixel is transparent
0 1 pixel is black
1 1 pixel is white
Однако, как ясно видно, это теряет один бит, когда пиксель прозрачен. Я разрабатываю микроконтроллер с ограниченным объемом памяти, поэтому, когда я могу сохранить память, это хорошо.
Итак, я пытаюсь придумать способ упаковать эти 3 состояния в какой-то более крупный блок (скажем, в байт). Я открыт для использования таблиц поиска для декодирования и кодирования данных, поэтому можно использовать сложный алгоритм , но он не может зависеть от состояний пикселей до или после текущей единицы / байта (это исключает любой правильный алгоритм сжатия данных), а размер должен быть согласованным; то есть сцена со всеми прозрачными пикселями должна быть такой же, как сцена со случайным шумом. Я представлял что-то на уровне плотно упакованного десятичного числа, которое упаковывает 3 x 4-битных (0-9) числа BCD только в 10 битов с чем-то вроде 24 состояний, остающихся из 1024, и это здорово. Так у кого-нибудь есть идеи?
Есть предложения? Спасибо!