2013-03-07 39 views
5

im cố gắng để làm một máy phát điện màu ngẫu nhiên nhưng tôi không muốn màu sắc tương tự như hiển thị trong ArrayListlàm thế nào tôi có thể so sánh màu sắc trong 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; 
} 

} 

Tôi thật sự bối rối xin vui lòng giúp :)

Trả lời

9

Thực hiện phương thức tương tựTo() trong lớp Màu.

Sau đó sử dụng:

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

Để thực hiện similarTo:

Hãy xem Color similarity/distance in RGBA color spacefinding similar colors programatically. Một phương pháp đơn giản có thể là:

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

Và:

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

Tuy nhiên, bạn nên tìm X theo ý tưởng tương tự.

0

Kiểm tra liên kết này.
How to match similar colours in Java using getRGB
Bạn có thể tìm hiểu về sự giống nhau về màu sắc trong chủ đề này.

+0

Nếu được, tại sao lại là -1? – Alex

+0

Nevermind cho -1 (mỗi câu trả lời trong trang này có -1), nhưng nếu bạn nghĩ câu trả lời hiện có trong câu hỏi khác có thể trả lời chính xác câu hỏi này, đánh dấu nó là trùng lặp lần sau. Tôi đoán đó là lý do cho downvote. @MichaelArdan – StarPinkER

4

tôi đã cố gắng này và nó đã làm việc rất tốt:

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

Chức năng getRGB trả về một giá trị int với tổng của Red Blue và Green, vì vậy chúng tôi đang so sánh các số nguyên không đối tượng.

+3

Điều này có thể đúng nhưng không trả lời được câu hỏi, đó là yêu cầu tìm kiếm tương tự, không chỉ màu sắc giống hệt nhau. – Synchro

Các vấn đề liên quan