Я создаю некоторое оборудование с графическим пользовательским интерфейсом, и мои изображения хранятся с 8 битами на пиксель (bpp) в формате RRRGGGBB. Однако мой видеочип требует 30 бит на пиксель (10 бит для каждого цвета), что оставляет мне проблему преобразования каждого канала из 3 бит (или 2 в синем случае) в 10 бит.
Поскольку я создаю систему с нуля, у меня есть большая гибкость при реализации решения. Некоторые возможные варианты:
Какой из этих подходов лучше других или есть более адекватное решение?
Спасибо,
Ни один из трех вариантов не является оптимальным. При преобразовании небольшого двоичного целого числа без знака в большее поместите исходные биты в старшие биты большого числа, затем продолжайте копировать все входное число в младшие биты, пока они не будут заполнены.
Например, предположим, что вы хотите расширить 3-битное значение до 8-битного, используя полный динамический диапазон 8-битного числа, но распределяя 8 возможных входных значений по этому диапазону как можно лучше. Допустим, исходные биты 3-битного входного числа равны ABC. Лучшим расширенным 8-битным числом с учетом вышеуказанных ограничений будет ABCABCAB.
Вероятно, это не совсем по теме Photo.SE. Тем не менее, вы, вероятно, захотите интерполировать. У вас есть диапазон [0, 7], представляемый тремя битами, и вы хотите растянуть его так, чтобы 0 оставался равным 0, а 7 отображался на 1023 (максимальное значение, которое можно представить десятью битами). Предполагая линейную интерполяцию, вы можете вычислить соответствующее 10-битное значение из 3-битного значения следующим образом:
v 10 бит = v 3 бит * 1023/7
Да, не по теме, и интерполяция — это то, что нужно, но я думаю, что вы можете получить лучшие результаты, используя соседние пиксели в своей интерпретации. Используйте пиксели N, S, E и W с одним весом, а пиксели NE, SE, NW и SW с меньшим весом, возможно, что-то связанное с квадратным корнем из 2.
Погуглите в поисках предсказания Пирша, возможно, вам поможет кое-что из математики.
Тем не менее, результаты не будут такими уж хорошими.
Джеймс Снелл
b1,b2,b3 -> b1,b2,b3,b1,b2,b3,b1,b2,b3,b1
.матдм
Рик
матдм