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:)

Author: I82Much, 2013-03-07

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.

 10
Author: StarPinkER, 2017-05-23 10:29:58

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.

 4
Author: Seikon, 2014-08-04 08:04:43

Controlla questo link.
Come abbinare colori simili in Java usando getRGB
Puoi trovare informazioni sulla somiglianza dei colori in questo argomento.

 0
Author: Alex, 2017-05-23 12:10:49