Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Farbhelligkeit verändern...

  Alt 20. Mär 2007, 23:58
Danke Euch!

Also ich habe gut 2 Tage alles mögliche zu Farben gelesen... Ist schon interessant.
Für alle, denen das etwas hilft, hier ein kleines Testprojekt mit meinen 2 Funktionen.
Damit sind Helligkeitsänderungen kein Problem (mehr).

Delphi-Quellcode:
uses
  GraphUtil; // !!

procedure TForm1.Button1Click(Sender: TObject);
begin
  ColorDialog1.Execute();
  Panel2.Color:=ColorDialog1.Color;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);

  // festen Helligkeitswert zuweisen (0=schwarz .. 240=weiß)
  function ColorLightness(clrRGB:TColor;Lightness:Integer):TColor;
  var H,L,S:Word;
  begin
    if (Lightness<0) then Lightness:=0;
    if (Lightness>240) then Lightness:=240;
    ColorRGBToHLS(ColorToRGB(clrRGB),H,L,S);
    Result:=TColor(ColorHLSToRGB(H,Lightness,S));
  end;

  // Helligkeitsdifferenz zuweisen (-240..240)
  // Wird die Helligkeit >240 oder <0 wird die Richtung umgedreht
  // bzw entsprechend begrenzt
  function ColorLightnessMove(clrRGB:TColor;Lightness:Integer):TColor;
  var H,L,S:Word;
      I:Integer;
  begin
    if (Lightness<-240) then Lightness:=-240;
    if (Lightness>240) then Lightness:=240;
    ColorRGBToHLS(ColorToRGB(clrRGB),H,L,S);
    I:=(L+Lightness);
    if (I>240) then begin
      if (L<=120) then I:=240
      else begin
        I:=(L-(I-L));
        if (I<0) then I:=0;
      end;
    end;
    if (I<0) then begin
      if (L>120) then I:=0
      else begin
        I:=(L+(L-I));
        if (I>240) then I:=240;
      end;
    end;
    Result:=TColor(ColorHLSToRGB(H,I,S));
  end;

begin
  Panel2.Caption:=IntToStr(TrackBar1.Position);
  Panel1.Color:=GetHighLightColor(Panel2.Color,TrackBar1.Position);
  Panel3.Color:=GetShadowColor(Panel2.Color,TrackBar1.Position);
  Panel4.Color:=ColorLightness(Panel2.Color,TrackBar1.Position);
  Panel5.Color:=ColorLightnessMove(Panel2.Color,TrackBar1.Position);
end;
Stahli

EDIT: Alle Maximalwerte 255 mussten natürlich in 240 geändert werden, da der Helligkeitsbereich 0..240 ist.
  Mit Zitat antworten Zitat