come potrei confrontare i colori in java?
Sto cercando di creare un generatore di colori casuali ma non voglio che colori simili vengano visualizzati nell'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;
}
}
Sono davvero confuso per favore aiuto:)
3 answers
Implementa un metodo similarTo() nella classe Colore.
Quindi utilizzare:
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;
}
Per implementare il similarTo:
Dai un'occhiata a Somiglianza/distanza del colore nello spazio colore RGBA e trovare colori simili in modo programmatico . Un approccio semplice può essere:
((r2-r1)2 + (g2-g1)2 + (b2-b1)2)1/2
E:
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;
}
}
Tuttavia, dovresti trovare la tua X secondo la tua immaginazione di simile.
Ho provato questo e ha funzionato molto bene:
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");
}
La funzione getRGB
restituisce un valore int con la somma di rosso blu e verde, quindi stiamo confrontando interi non oggetti.
Controlla questo link.
Come abbinare colori simili in Java usando getRGB
Puoi trovare informazioni sulla somiglianza dei colori in questo argomento.