AGB  ·  Datenschutz  ·  Impressum  







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

Unterschiedliche Farben generieren

Ein Thema von Marc · begonnen am 24. Jun 2004 · letzter Beitrag vom 24. Jun 2004
 
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Unterschiedliche Farben generieren

  Alt 24. Jun 2004, 18:53
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
 


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 20:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz