RGB: регулировка яркости #266197


#0 by Фокусник
Подскажите алгоритм (или ссылку) преобразования цвета (ярче-темнее) в формате RGB. Например для простого цвета красный (255, 0, 0) понятно: ярче - R уменьшать от 255 до 0 темнее - G и B одинаково увеличивать от 0 до 255
#1 by mrkorn
пропорционально надо уменьшать... типа 240 128 0, то будет 120 64 0
#2 by Фокусник
угу, уже что-то, спасибо (: темнее получается, а ярче тогда если какое-то число уже упёрлось в 255 его как увеличить? например тот же 240, 128, 0 увеличить пропорционально можно только до 255, 136, 0, а еще ярче? (:
#3 by dk
Не в тему, но интересно: Как прообразовать цветную картинку в чернобелую? Понимаю, что R=G=B, но как преобразовать (127, 255, 0)?
#4 by mrkorn
как вариант, градация по суммарной яркости... Серый - 0-255   Цветной 0 - 765   127 + 255 + 0  -> 127
#5 by mrkorn
+
#6 by dk
(mrkorn) Угу, спасибо А суммарная это (127 + 255 + 0) / 3?
#7 by mrkorn
да, но по ссылке в стандартный алгоритм...
#8 by Груздь
Процедура RGB2HLS(Знач R, Знач G, Знач B,H,L,S)    R=R/256;    G=G/256;    B=B/256;    цМин=Мин(R,G,B);    цМакс=Макс(R,G,B);    LL=(цМин+цМакс)/2;    SS=0;    Если цМин<>цМакс Тогда        Если LL<0.5 Тогда            SS=(цМакс-цМин)/(цМакс+цМин);        Иначе            SS=(цМакс-цМин)/(2-цМакс-цМин);        КонецЕсли;        Если R=цМакс Тогда HH=(G-B)/(цМакс-цМин) КонецЕсли;        Если G=цМакс Тогда HH=2+(B-R)/(цМакс-цМин) КонецЕсли;        Если B=цМакс Тогда HH=4+(R-G)/(цМакс-цМин) КонецЕсли;            H=Окр(HH*40);    КонецЕсли;    L=Окр(LL*240);    S=Окр(SS*240); КонецПроцедуры           //----------------------------------------------------------------------------- Функция ХХХ(Ц,L1,L2)    Если Ц<0 Тогда Ц=Ц+1 КонецЕсли;    Если Ц>1 Тогда Ц=Ц-1 КонецЕсли;    Если 6*Ц<1 Тогда        Возврат Окр((L1+(L2-L1)*6*Ц)*255);    ИначеЕсли 2*Ц<1 Тогда        Возврат Окр(L2*255);    ИначеЕсли 3*Ц<2 Тогда        Возврат Окр((L1+(L2-L1)*((2/3)-Ц)*6)*255);    КонецЕсли;    Возврат Окр(L1*255); КонецФункции //-----------------------------------------------------------------------------                     Процедура HLS2RGB(Знач H,Знач L,Знач S,R,G,B)    HH=H/240;    LL=L/240;    SS=S/240;    R=Цел(LL*255);        G=R;    B=R;    Если S>0 Тогда        Если LL<0.5 Тогда            L2=LL*(1+SS);        Иначе            L2=LL+SS-LL*SS;        КонецЕсли;        L1=2*LL-L2;        R=ХХХ(HH+1/3,L1,L2);        G=ХХХ(HH,L1,L2);        B=ХХХ(HH-1/3,L1,L2);    КонецЕсли;   КонецПроцедуры
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С