2013-03-07 177 views
5

我尝试做一个随机生成的颜色,但我不想类似颜色的ArrayList中如何比较java中的颜色?

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

} 

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

回答

9

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

要实现性相似:

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

((2 - R 1)2 +(G2 - G1) +(B2 - B1))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.

0

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

+0

如果有帮助,它为什么是-1? – Alex 2013-03-07 03:31:12

+0

对于-1(本页面中的每个答案都有-1)没有要求,但如果您认为另一个问题中的现有答案可以准确回答此问题,请将其标记为下次重复。我想这就是downvote的原因。 @MichaelArdan – StarPinkER 2013-03-07 09:52:26

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值,所以我们是在比较整数不是对象。

+3

这可能是正确的,但它不回答这个问题,它要求找到相似的颜色,而不仅仅是相同的颜色。 – Synchro 2014-08-04 08:05:54