Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Farbwerte vergleichen (https://www.delphipraxis.net/90976-farbwerte-vergleichen.html)

HannosG 26. Apr 2007 21:30


Farbwerte vergleichen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Es wurde hier schon des öfteren über das Vergleichen von zwei Farbwerten diskutiert.
Da sich weder RGB (RGB-Probleme, wenig Berücksichtigung der menschlichen Farbwahrnehmung)
noch HSV (Sprungstelle bei V von 360° zu 0°; bei Werten in der Nähe von schwarz und weiß werden S und V irrelevant, V ist in Graustufen undefiniert)
gut dazu eignen, möchte ich hier eine andere Variante vorstellen.

Es handelt sich hierbei um den I1I2I3-Farbraum (Wikipedia).
(Warum dieser Farbraum so praktisch ist, erfährt man in Wikipedia :zwinker:)

Als Funktion, die die Farbabweichung nun feststellen soll, sieht das ganze so aus:
Delphi-Quellcode:
function GetPixelAbweichung(Farbe1,Farbe2: TColor): Byte;
type
Farbwerte = record
  I1,I2,I3: Integer;
  end;

var
R,G,B: Byte;
Farbe1I, Farbe2I, DeltaI: Farbwerte;

begin
R:=GetRValue(Farbe1);
G:=GetGValue(Farbe1);
B:=GetBValue(Farbe1);
Farbe1I.I1:=(R+G+B)div 3; // Umrechnung: RGB in I1I2I3
Farbe1I.I2:=(R-B)div 2;
Farbe1I.I3:=(2*G-R-B)div 4;

R:=GetRValue(Farbe2);
G:=GetGValue(Farbe2);
B:=GetBValue(Farbe2);
Farbe2I.I1:=(R+G+B)div 3; // Umrechnung: RGB in I1I2I3
Farbe2I.I2:=(R-B)div 2;
Farbe2I.I3:=(2*G-R-B)div 4;

DeltaI.I1:=Abs(Farbe1I.I1-Farbe2I.I1); // Abweichung (Differenz) der Einzelwerte
DeltaI.I2:=Abs(Farbe1I.I2-Farbe2I.I2);
DeltaI.I3:=Abs(Farbe1I.I3-Farbe2I.I3);

Result:=Max(Max(DeltaI.I1,DeltaI.I2),DeltaI.I3); // Maximale Abweichung

{Result:=Max(Abs(GetRValue(Farbe1)-GetRValue(Farbe2)), // (Das wäre Farbabweichung über RGB)
        Max(Abs(GetGValue(Farbe1)-GetGValue(Farbe2)),
        Abs(GetBValue(Farbe1)-GetBValue(Farbe2)))); }
end;
Anbei zwei Testprogramme, die mit dieser Funktion arbeiten:


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