我怎么能比较java中的颜色?

时间:2013-03-07 02:58:53

标签: java random colors rgb

我试图制作一个随机颜色生成器,但我不希望类似的颜色显示在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;
}

}

我真的很困惑请帮助:)。

3 个答案:

答案 0 :(得分:12)

在Color类中实现similarTo()方法。

然后使用:

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

实现similarTo:

查看Color similarity/distance in RGBA color spacefinding similar colors programatically。一个简单的方法可以是:

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

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

但是,你应该根据你的想象来找到你的X.

答案 1 :(得分:4)

我试过这个并且效果很好:

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

getRGB函数返回一个红色蓝色和绿色之和的int值,因此我们比较的是整数而不是对象。

答案 2 :(得分:0)

检查此链接。
How to match similar colours in Java using getRGB
您可以在此主题中找到有关颜色相似性的内容。