Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Конвертирование цветов


Evgeniy_K ©   (2004-07-28 17:11:00) 

Как оптимальней конвертировать RGB в любой: 8, 32 бит.


Evgeniy_K   (2004-07-29 17:19:00) [1]

Близко ведь был, что-то подобное в голове вертелось. Оч. благодарен.

Все гениальное - просто (с)


Darthman   (2004-07-29 14:03:00) [2]

function ColorBit32(Color: DWORD; BitCount: Integer; Intensity: Real): DWORD;
var
r, g, b: byte;
begin
//
if Intensity > 1 then Intensity:= 1;
r:= round(GetRValue(Color) * Intensity);
g:= round(GetGValue(Color) * Intensity);
b:= round(GetBValue(Color) * Intensity);
Result:= $FF000000 or b or (g shl 8) or (r shl 16);
end;


Ricks   (2004-07-29 14:01:00) [3]

32 битный цвет состоит из того-же RGB и Alpha канала.
То есть : $AARRGGBB


Evgeniy_K   (2004-07-29 12:30:00) [4]

поподробней, плз. Можно алгоритмически?


Drinkins   (2004-07-29 09:48:00) [5]

первый бит хранит номер палитры. остальные номер цвета в этой палитре.. кажется так... Или я ошибаюсь...


Evgeniy_K   (2004-07-28 19:17:00) [6]

Понятно, а как быть с 32 бит?


Zer0   (2004-07-28 19:11:00) [7]

в формате 8-бит используются индексы вместо rgb компонент.
для преобразования придется подбирать наиболее подходящую палитру, и хитрить с комбинациями цветов для плавных переходов.

эта задача оч ресурсоемкая и не рассчитана на рилтайм-работу.


OSokin   (2004-07-28 18:59:00) [8]

Сделай не byte, а word (byte - 8 бит, word - 16) и умножь на два r, g и b. Имхо сработает.


Evgeniy_K   (2004-07-28 18:53:00) [9]

Нужно как-то взять старый цвет RGB и приписат к нему нужный альфа-канал. Как это сделать? И Как быть с 8 бит?


Evgeniy_K   (2004-07-28 18:52:00) [10]

не работает [3], по всякому пробовал


Evgeniy_K   (2004-07-28 18:47:00) [11]

что конкретно умножить? Подробней, плз, у себя проверь


OSokin   (2004-07-28 18:40:00) [12]

Дык умножь на два


Evgeniy_K   (2004-07-28 18:32:00) [13]

Ну вот пример, а точнее что я хочу:
function ColorBit(Color: DWORD; BitCount: Integer; Intensity: Real): DWORD;
var
 r, g, b: byte;
begin
 //
 if Intensity > 1 then Intensity:= 1;
 r:= round(GetRValue(Color) * Intensity);
 g:= round(GetGValue(Color) * Intensity);
 b:= round(GetBValue(Color) * Intensity);
 Result:= b or (g shl 5) or (r shl 11);
end;

Мне надо, чтобы функция работала не только для 16 битного режима. Т.е. функция возвращает цвет. Если он был 16 битным красным, то и 32-битным надо, чтобы был красным.


OSokin   (2004-07-28 18:15:00) [14]

Не понял немного вопроса.


Наверх

Титульная страница Поиск, карта сайта Написать письмо