![]() |
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 ( ![]() 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 ![]() (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:
Anbei zwei Testprogramme, die mit dieser Funktion arbeiten:
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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