Я новичок в C. У меня есть функция, которая преобразует три unsigned char
или uint8_t
(r, g и b), каждый из которых представляет значение цвета для красного, синего и зеленого соответственно. У меня есть функция, которая конвертирует их в формат R5B6G5. Этот формат используется для хранения цвета 16-разрядного целого числа без знака. Это означает, что первые (слева) 5 битов хранят значение красного (r), следующие 6 битов для зеленого (g) и последние 5 бит для синего. Функция:
uint16_t R5G6B5(uint8_t r, uint8_t g, uint8_t b) {
return ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
}
Мой вопрос: как мне вернуть три значения r (красный), g (зеленый) и b (синий) из заданного uint16_t
. Насколько я понимаю, я не могу, потому что битовая операция или операция необратима. Но приложение, похоже, может отображать цвета из этого формата, поэтому я предполагаю, что оно каким-то образом способно получить три значения.
Спасибо.