how could i compare colors in java?
19,996
Solution 1
Implement a similarTo() method in Color class.
Then use:
public static ArrayList<Color> ColorList(int numOfColors) {
ArrayList<Color> colorList = new ArrayList<Color>();
for (int i = 0; i < numOfColors; i++) {
Color c = RandColor();
boolean similarFound = false;
for(Color color : colorList){
if(color.similarTo(c)){
similarFound = true;
break;
}
}
if(!similarFound){
colorList.add(c);
}
}
return colorList;
}
To implement the similarTo:
Take a look at Color similarity/distance in RGBA color space and finding similar colors programatically. A simple approach can be:
((r2 - r1)2 + (g2 - g1)2 + (b2 - b1)2)1/2
And:
boolean similarTo(Color c){
double distance = (c.r - this.r)*(c.r - this.r) + (c.g - this.g)*(c.g - this.g) + (c.b - this.b)*(c.b - this.b)
if(distance > X){
return true;
}else{
return false;
}
}
However, you should find your X according to your imagination of similar.
Solution 2
I tried this and it worked very well:
Color c1 = Color.WHITE;
Color c2 = new Color(255,255,255);
if(c1.getRGB() == c2.getRGB())
System.out.println("true");
else
System.out.println("false");
}
The getRGB
function returns an int value with the sum of Red Blue and Green, so we are comparing integers not objects.
Comments
-
Ryan Maddox almost 2 years
im trying to make a random color generator but i dont want similar colors to show up in the arrayList
public class RandomColorGen { public static Color RandColor() { Random rand = new Random(); float r = rand.nextFloat(); float g = rand.nextFloat(); float b = rand.nextFloat(); Color c = new Color(r, g, b, 1); return c; } public static ArrayList<Color> ColorList(int numOfColors) { ArrayList<Color> colorList = new ArrayList<Color>(); for (int i = 0; i < numOfColors; i++) { Color c = RandColor(); if(similarcolors){ dont add } colorList.add(c); } return colorList; } }
I'm really confused please help :)
-
Synchro almost 10 yearsThis may be correct but it doesn't answer the question, which is asking to find similar, not just identical colours.
-
Charles Mosndup about 5 yearsThis can be used to solve the issue of the OSX color matching discrepancies of the Robot.getPixelColor(int x, int y).