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

Вниз

Яркость изображения в TImage   Найти похожие ветки 

 
ivan_ivany4   (2014-06-27 13:46) [0]

Здравствуйте, мастера!
Подскажите как программно изменить яркость части изображения, загруженного в TImage, или как хотя бы как полностью у всего изображения изменять яркость?
Спасибо!


 
Игорь Шевченко ©   (2014-06-27 14:08) [1]

Например, перевести в цветовую модель HSД и уменьшить L у каждой точки изображения


 
Игорь Шевченко ©   (2014-06-27 14:08) [2]

HSL


 
oldman ©   (2014-06-27 17:21) [3]

{ Максимальные значения }
Const
HLSMAX = 240;
RGBMAX = 255;
UNDEFINED = (HLSMAX*2) div 3;
Var
H, L, S  : integer; { H-оттенок, L-яркость, S-насыщенность }
R, G, B  : integer; { цвета }

procedure RGBtoHLS;
Var
cMax,cMin  : integer;
Rdelta,Gdelta,Bdelta : single;
Begin
  cMax := max( max(R,G), B);
  cMin := min( min(R,G), B);
  L := round( ( ((cMax+cMin)*HLSMAX) + RGBMAX )/(2*RGBMAX) );

  if (cMax = cMin) then begin
     S := 0; H := UNDEFINED;
  end else begin
     if (L <= (HLSMAX/2)) then
        S := round( ( ((cMax-cMin)*HLSMAX) + ((cMax+cMin)/2) ) / (cMax+cMin) )
     else
        S := round( ( ((cMax-cMin)*HLSMAX) + ((2*RGBMAX-cMax-cMin)/2) )
           / (2*RGBMAX-cMax-cMin) );
     Rdelta := ( ((cMax-R)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
     Gdelta := ( ((cMax-G)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
     Bdelta := ( ((cMax-B)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
     if (R = cMax) then H := round(Bdelta - Gdelta)
     else if (G = cMax) then H := round( (HLSMAX/3) + Rdelta - Bdelta)
     else H := round( ((2*HLSMAX)/3) + Gdelta - Rdelta );
     if (H < 0) then H:=H + HLSMAX;
     if (H > HLSMAX) then H:= H - HLSMAX;
  end;
  if S<0 then S:=0; if S>HLSMAX then S:=HLSMAX;
  if L<0 then L:=0; if L>HLSMAX then L:=HLSMAX;
end;

procedure HLStoRGB;
Var
Magic1,Magic2 : single;

 function HueToRGB(n1,n2,hue : single) : single;
 begin
    if (hue < 0) then hue := hue+HLSMAX;
    if (hue > HLSMAX) then hue:=hue -HLSMAX;
    if (hue < (HLSMAX/6)) then
       result:= ( n1 + (((n2-n1)*hue+(HLSMAX/12))/(HLSMAX/6)) )
    else
    if (hue < (HLSMAX/2)) then result:=n2 else
    if (hue < ((HLSMAX*2)/3)) then
       result:= ( n1 + (((n2-n1)*(((HLSMAX*2)/3)-hue)+(HLSMAX/12))/(HLSMAX/6)))
    else result:= ( n1 );
 end;

begin
  if (S = 0) then begin
     B:=round( (L*RGBMAX)/HLSMAX ); R:=B; G:=B;
  end else begin
     if (L <= (HLSMAX/2)) then Magic2 := (L*(HLSMAX + S) + (HLSMAX/2))/HLSMAX
     else Magic2 := L + S - ((L*S) + (HLSMAX/2))/HLSMAX;
     Magic1 := 2*L-Magic2;
     R := round( (HueToRGB(Magic1,Magic2,H+(HLSMAX/3))*RGBMAX + (HLSMAX/2))/HLSMAX );
     G := round( (HueToRGB(Magic1,Magic2,H)*RGBMAX + (HLSMAX/2)) / HLSMAX );
     B := round( (HueToRGB(Magic1,Magic2,H-(HLSMAX/3))*RGBMAX + (HLSMAX/2))/HLSMAX );
  end;
  if R<0 then R:=0; if R>RGBMAX then R:=RGBMAX;
  if G<0 then G:=0; if G>RGBMAX then G:=RGBMAX;
  if B<0 then B:=0; if B>RGBMAX then B:=RGBMAX;
end;

http://www.z-oleg.com/delphi/graph.htm#gr00006



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

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

Наверх




Память: 0.48 MB
Время: 0.005 c
15-1430688602
Юрий
2015-05-04 00:30
2015.12.27
С днем рождения ! 4 мая 2015 понедельник


15-1430775002
Юрий
2015-05-05 00:30
2015.12.27
С днем рождения ! 5 мая 2015 вторник


15-1430502599
Кто б сомневался
2015-05-01 20:49
2015.12.27
Досоздать наследованный класс позже


3-1306138163
vv_fran
2011-05-23 12:09
2015.12.27
Как сообщение RAISERROR из ХП показать пользователю на экране?


15-1430343002
Юрий
2015-04-30 00:30
2015.12.27
С днем рождения ! 30 апреля 2015 четверг