Вот моё решение.
Аналитическое, надо проверить на практике.
Маленькая таблица и никаких умножений-делений.
Заведём таблицу:
t=[281,19,263,1,280,18,262,0];
Пусть p1,p2,p3,p4 - трёхбитовые цвета цвета четырёх пикселей.
Пусть bright - одна на всех яркость.
Цвет результирующего пикселя можно подсчитать так:
Код:
color=256+t[p1]+t[p2]+t[p3]+t[p4];
if (!bright) color+=281;
if (color & 0x0400) color+=90; //синий из второй половины
color&=0xff; //взять младший байт
Результат: color - цвет из вышенарисованной палитры.
Для переменной color и элементов таблицы t необходимо минимум 2 байта (одного байта недостаточно).