comment puis-je comparer les couleurs en java?


J'essaie de créer un générateur de couleurs aléatoires mais je ne veux pas que des couleurs similaires apparaissent dans la liste de tableaux

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;
}

}

Je suis vraiment confus veuillez aider:)

Author: I82Much, 2013-03-07

3 answers

Implémenter une méthode similarTo() dans la classe Color.

Puis utiliser:

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;
}

Pour implémenter le similarTo:

Jetez un oeil à Similitude de couleur/distance dans l'espace colorimétrique RGBA et trouver des couleurs similaires par programme . Une approche simple peut être:

((r2 - r1)2 + (g2 - g1)2 + (b2 - b1)2)1/2

Et:

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;
    }
}

Cependant, vous devriez trouver votre X selon votre imagination de similaire.

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

J'ai essayé cela et cela a très bien fonctionné:

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 fonction getRGB renvoie une valeur int avec la somme du Bleu rouge et du Vert, nous comparons donc des entiers et non des objets.

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

Vérifiez ce lien.
Comment faire correspondre des couleurs similaires en Java en utilisant getRGB
Vous pouvez trouver sur la similitude de couleur dans cette rubrique.

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