2013-03-07 2 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.

Затем используйте:

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 space и finding similar colors programatically. Простой подход может быть:

((r2 - r1) + (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

+0

Nevermind for -1 (каждый ответ на этой странице получил -1), но если вы думаете, что существующий ответ в другом вопросе может точно ответить на этот вопрос, отметьте его как дублирующийся в следующий раз. Наверное, это и есть причина для понижения. @MichaelArdan – StarPinkER

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 функция возвращает целочисленное значение с суммой красный синий и зеленый, поэтому мы сравниваем целые числа не объекты.

+3

Это может быть правильно, но это не отвечает на вопрос, который просит найти похожие, а не только одинаковые цвета. – Synchro

Смежные вопросы