AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farbverlauf berechnen

Ein Thema von shmia · begonnen am 10. Nov 2005
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Farbverlauf berechnen

  Alt 10. Nov 2005, 16:31
Folgende Funktionen berechnen einen Farbverlauf zwischen 2 oder mehr Farben.
Die Überblendung wird über den Parameter blend gwählt, der sich zwischen 0.0 und 1.0 bewegen darf.
Ich habe bewusst die Berechnung des Farbverlaufs vom Zeichnen des Verlaufs getrennt.
Damit kann der Farbverlauf in jede beliebige Richtung und auf beliebige grafische Objekte (Rechteck, Kreis,...) angewendet werden. (siehe Beispiel unten)

Delphi-Quellcode:
// Farbe zwischen 2 vorgegebenen Farbwerten berechnen
function ColorBetween(C1, C2 : TColor; blend:Real):TColor;
var
   r, g, b : Byte;

   y1, y2 : Byte;
begin
   C1 := ColorToRGB(C1);
   C2 := ColorToRGB(C2);

   y1 := GetRValue(C1);
   y2 := GetRValue(C2);

   r := Round(y1 + (y2-y1)*blend);

   y1 := GetGValue(C1);
   y2 := GetGValue(C2);

   g := Round(y1 + (y2-y1)*blend);

   y1 := GetBValue(C1);
   y2 := GetBValue(C2);

   b := Round(y1 + (y2-y1)*blend);
   Result := RGB(r, g, b);
end;

// Farbe zwischen beliebig vielen vorgegebenen Farbwerten berechnen
function ColorsBetween(colors:array of TColor; blend:Real):TColor;
var
   a : Integer;
   faktor : Real;
begin
   if Length(colors) < 2 then
      raise Exception.Create('ColorsBetween() at least 2 Colors required');

   if blend <= 0.0 then
      Result := colors[0]
   else if blend >= 1.0 then
      Result := colors[High(colors)]
   else
   begin
      a := Trunc(High(colors) * blend);
      faktor := 1.0 / High(colors);

      Result := ColorBetween(colors[a], colors[a+1], (blend-(a * faktor)) / faktor);
   end;
end;
Zum Testen der Funktionen setzt man einen Trackbar auf ein Formular und schreibt dann im OnChange - Event:
Delphi-Quellcode:
procedure TForm1.TrackBar2Change(Sender: TObject);
var
   blend : Real;
begin
   blend := TrackBar1.Position / TrackBar1.Max;
   Self.Color := ColorsBetween([clBlack, clRed, clGreen, clwhite], blend);
end;
ein Beispiel für ein farbiges Rechteck:
Delphi-Quellcode:
var
   radius, r : Integer;
   rt : TRect;
begin
   radius := 100;
   for r := radius downto 1 do
   begin
      rt := Rect(-r, -r, r, r);
      OffsetRect(rt, 400, 200);
      Canvas.Pen.Color := ColorsBetween([clBlack, clRed, clYellow], r / radius);
      Canvas.Polygon([Point(rt.left, rt.top), Point(rt.right, rt.top), Point(rt.right, rt.Bottom), Point(rt.left, rt.bottom)]);
   end;
end;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz