![]() |
Mehrere Farben vergleichen
Hi,
ich möchte mit meinem Programm eine Anzahl n Farbwerte (TColor) miteinander vergleichen und den am häufigsten vorkommenden Farbwert ausgeben. Ich bin aber an jedem eigenem Versuch gescheitert. Plan:
Delphi-Quellcode:
... // Farbwerte auslesen ... MainColor := CompareColor( {Array of TColor} ); ... function TForm1.CompareColor(Colors: Array of TColor): TColor; begin // ????? end; |
Re: Mehrere Farben vergleichen
Wie sieht das übergebene Array denn aus? Kommen da Farben evtl. mehrfach drin vor?
[edit] Blöde Frage, sonst müsste man j nicht zählen :oops: [/edit] [edit2] Doch noch eine sinnvolle Frage: Wenn das Array so aussieht [blau,blau,blau,rot,rot,rot,grün,grün,grün,schwarz], was soll die Funktion denn dann zurückliefern? blau, rot, oder grün? [/edit2] |
Re: Mehrere Farben vergleichen
|
Re: Mehrere Farben vergleichen
Du benötigst einen Container, bei dem Du nach einem TColor (=Cardinal)-Schlüssel suchen kannst. Du kannst eine TStringList bzw. eine THashedStringlist verwenden. Der Schlüssel ist dann IntToStr (MyColor). Die Objects-Eigenschaft misbrauchst du als Zähler. Anschließend sortierst Du nach Integer (Objects[*]) und -bupps- hast Du deine Häufigkeitsverteilung.
Delphi-Quellcode:
Procedure CountColor (aColor : TColor; aList : TStringList);
Var sKey : String; i : Integer; Begin sKey := IntToStr (aColor); i := aList.IndexOf (sKey); If i=-1 Then i := aList.Add (sKey, Pointer (1)) Else aList.Objects[i] := Pointer (Integer (aList.Objects[i]) + 1); End; function CompareObjects (List: TStringList; Index1, Index2: Integer): Integer; Begin Result := Integer (List.Objects[Index2]) - Integer(List.Objects[Index1]); End; Procedure SortByIntegerObject (aList : TStringList); Begin aList.CustomSort (CompareObjects); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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