2013-03-07 178 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