Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Конвертирование цветов   Найти похожие ветки 

 
Evgeniy_K   (2004-07-28 17:11) [0]

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


 
OSokin ©   (2004-07-28 18:15) [1]

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


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

Ну вот пример, а точнее что я хочу:
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:40) [3]

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


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

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


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

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


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

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


 
OSokin ©   (2004-07-28 18:59) [7]

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


 
Zer0 ©   (2004-07-28 19:11) [8]

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

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


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

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


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

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


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

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


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

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


 
Darthman ©   (2004-07-29 14:03) [13]

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;


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
14-1099077051
Cerberus
2004-10-29 23:10
2004.11.28
Скушно


1-1100622946
JIuraradg
2004-11-16 19:35
2004.11.28
Как оставить циклическую процедуру?


14-1100037928
KilkennyCat
2004-11-10 01:05
2004.11.28
Завтра покупаю еще одну чугунную сковородку.


3-1098958119
Black
2004-10-28 14:08
2004.11.28
SQL сервер своими руками


3-1098992137
GanibalLector
2004-10-28 23:35
2004.11.28
результат в ХП