Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unterschiedliche Farben generieren (https://www.delphipraxis.net/24701-unterschiedliche-farben-generieren.html)

Marc 24. Jun 2004 18:10


Unterschiedliche Farben generieren
 
Hallo,

ich erstelle gerade ein Diagramm. Kann mir jemand sagen wie ich X unterscheidbare Farben generieren kann? Mit random habe ich es schon versucht, aber da kommen öfters gleich bzw. ähnlichfarbige Werte raus.

Danke

dizzy 24. Jun 2004 18:12

Re: Unterschiedliche Farben generieren
 
Mach die doch eine Sammlung von ein paar genügend unterschiedlichen Farben von Hand, aus welcher du dann zufällig eine greifst. Die normale (gute alte ;)) 16-Farben-Palette ist z.B. garnet so übel *g*

SirThornberry 24. Jun 2004 18:25

Re: Unterschiedliche Farben generieren
 
ich hatte da schonmal nen source, installier grad Delphi neu - 15 Minuten warten und ich poste dir den source

SirThornberry 24. Jun 2004 18:53

Re: Unterschiedliche Farben generieren
 
Hier der Source
Delphi-Quellcode:
function IsSameConsideringRange(Val1, Val2: Integer; ARange: Word = 5): Boolean;
begin
  result := (Val1 >= Val2 - ARange) and (Val1 <= Val2 + ARange);
end;

procedure TForm1.Button1Click(Sender: TObject);
var LRed, LGreen, LBlue, LMindestabstand: Byte;
    LFarben: Array of TColor;
    LIsNew: Boolean;
    LCount1, LCountFarben: Integer;
begin
  LMindestabstand := 60; //Legt Fest wie ähnlich sich die farben sein dürfen. Je kleiner die Zahl destso ähnlicher dürfen sich die farben werden. Man sollte allderdings bedenken das es zu einer Endlosschleife werden kann wenn man den wert zu hoch setzt weil es irgendwann bei zu viel farben keine farbe mehr gibt die dann anders aussieht
  for LCountFarben := 1 to 40 do //anzahl der Farben die erzeugt werden soll
  begin
    repeat
      LIsNew := True;
      LRed := Random(256);
      LGreen := Random(256);
      LBlue := Random(256);
      for LCount1 := 0 to length(LFarben) - 1 do
      begin
        if IsSameConsideringRange(LRed, GetRValue(LFarben[LCount1]), LMindestabstand) and
           IsSameConsideringRange(LGreen, GetGValue(LFarben[LCount1]), LMindestabstand) and
           IsSameConsideringRange(LBlue, GetBValue(LFarben[LCount1]), LMindestabstand) then
        begin
          LIsNew := False;
          break;
        end;
      end;
    until LIsNew;
    setlength(LFarben, length(LFarben)+1);
    LFarben[length(LFarben)-1] := RGB(LRed, LGreen, LBlue);
  end;

  //farben testweise auf Image1 ausgeben
  image1.Picture.Bitmap.Width := image1.Width;
  image1.Picture.Bitmap.Height := image1.Height;
  for LCount1 := 0 to length(LFarben)-1 do
  begin
    Image1.Picture.Bitmap.Canvas.Brush.Color := LFarben[LCount1];
    Image1.Picture.Bitmap.Canvas.FillRect(Rect(0, LCount1 * 10, Image1.Width, LCount1 * 10 + 10));
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 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