Я создаю ретро-эмулятор и не могу вспомнить, как преобразовать один байт в значение RGB и обратно из RGB в один байт.Одиночный байт для RGB и RGB для одного байта
Я попытался использовать побитовые методы, но он просто не работает для этого сценария.
Я нашел этот пост, который похож, How can I make 3 bytes corresponding to RGB into a single byte?, но я просто не могу заставить его работать как возвращаемые значения больше чем 255.
Таким образом, для понимания, если кто-то использовал, чтобы иметь Atari ST или ZX Spectrum цветной поддон был очень компактным, который мог поместиться в один байт, а не как сегодня 4 байта rgba.
Может кто-нибудь пробежать память?
ПСЕВДОКОД
int R = 1 (range 0 to 6);
int G = 3 (range 0 to 6);
int B = 5 (range 0 to 6);
// Convert values to single byte
byte myByte = (R << 2) + (G << 1) + (B)
// Convert byte back to RGB
R = myByte/?;
G = myByte/?;
B = myByte/?
Максимальное значение 6 в этой ситуации указывает максимальную интенсивность цвета? –
3 бит на канал, 3 канала -> 9 бит. Как это должно помещаться в 1 байт? Кроме того, R, G и B будут перекрываться, потому что они являются только сдвигом по 1 бит. Этот код не работает. Если вы хотите поместить цвет в один байт, вам нужно использовать палитру (например, GIF) или пожертвовать одним битом (желательно не зеленым), как в вопросе, который вы связали. –
Возможный дубликат [Как я могу сделать 3 байта, соответствующих RGB, в один байт?] (Http://stackoverflow.com/questions/12222992/how-can-i-make-3-bytes-corresponding-to-rgb -into-a-single-byte) –