Ich habe mal schnell eine Funktion geschrieben (für Fehlerfreiheit und Performance übernehme ich allerdings kein Garantie):
Delphi-Quellcode:
function SimilarColors(FirstColor, SecondColor: TColor;
Percentage: byte = 5): Boolean;
function ColorInRange(first, second: byte): Boolean;
begin
Result := abs(first - second) <= Round(MAXBYTE / 100 * Percentage);
end;
var R1,R2,G1,G2,B1,B2: byte;
begin
R1 := GetRValue(FirstColor);
R2 := GetRValue(SecondColor);
G1 := GetGValue(FirstColor);
G2 := GetGValue(SecondColor);
B1 := GetBValue(FirstColor);
B2 := GetBValue(SecondColor);
Result := ColorInRange(R1,R2) and ColorInRange(G1,G2) and ColorInRange(B1,B2);
end;
In kurzen Tests sah das ganz gut aus, aber ich kann mich auch irgendwo verrechnet haben.