|
Как 16 битный цвет разложить на составляющие? |
|
|
|
 |
Ответов
(1 - 14)
|
Oct 21 2011, 05:59
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
GDI от Microsoft использует правило: Для 5-разрядных (красный и синий) каналов, три старших бита копируются как младшие биты байта, то есть присоединяются справа к 5-битному слову. ABCDE -> ABCDE'ABC Для 6-битного (зеленого) канала два. ABCDEF -> ABCDEF'AB Пример: (0x15, 0x33, 0x1D) станет (0xAD, 0xCF, 0xEF) Красный: канал: 1 0101 -> 1010 1101. Зеленый: 11 0011 -> 1100 1111. Синий преобразуется так же, как и красный. Взято отсюда: http://msdn.microsoft.com/en-us/library/wi...6(v=vs.85).aspxМожно также масштабировать компоненты. Например: http://ez.analog.com/thread/1205Но можно и проще, подправив пример от AHTOXA
Сообщение отредактировал x736C - Oct 21 2011, 06:01
|
|
|
|
|
Oct 21 2011, 06:15
|

Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544

|
Думаю правильно будет так Код R = (RGB >> 11) & 0x1F; G = (RGB >> 5) & 0x3F; B = RGB & 0x1F;
|
|
|
|
|
Oct 21 2011, 06:45
|

Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544

|
Согласен Код R = ((RGB >> 11) & 0x1F) << 3; G = ((RGB >> 5) & 0x3F) << 2; B = (RGB & 0x1F) << 3; Жаль, что значение 255 никогда не будет получено.
|
|
|
|
|
Oct 21 2011, 07:34
|

Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544

|
Тогда вот так Код R = (((RGB >> 11) & 0x1F) << 3) | (RGB >> 13); G = (((RGB >> 5) & 0x3F) << 2) | ((RGB >> 8) & 0x07); B = ((RGB & 0x1F) << 3) | ((RGB >> 2) & 0x07);
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|