Link to home
Start Free TrialLog in
Avatar of hutelihut
hutelihut

asked on

How to compare colors

How do I make a function that compares two colors and return TRUE if the two colors are the same?

There has to be some kind of "tolerance-variabel", for example:

When Tolerance is 0 the function returns true if the two colors are exactly the same
When Tolerance is 10 the function returns true if the two colors are mostly the same
When Tolerance is 50 the function returns true if the two colors are slightly the same
and so on...

The function could be something like:

function SameColor(Color1,Color2:tColor; Tolerance:Word):boolean;
begin
  SameColor:=abs(GetRValue(Color1)-GetRValue(Color2))+
             abs(GetGValue(Color1)-GetGValue(Color2))+
             abs(GetBValue(Color1)-GetBValue(Color2))<=Tolerance;
end;

...but this does not work very well.

How do I make this function in a better way?
Avatar of mokule
mokule
Flag of Poland image

Better measure of difference is sum of squares.

Another alternative is recalculate RGB to more meaningfull coefficients like YUV and compare them

ASKER CERTIFIED SOLUTION
Avatar of Member_2_248744
Member_2_248744
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial