2013-03-07 11 views
5

im Versuch, eine zufällige Farbe Generator zu machen, aber ich habe nicht ähnlichen Farben in der Arraylist zeigen wollenWie könnte ich Farben in Java vergleichen?

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

} 

ich wirklich verwirrt bin bitte :)

Antwort

9

Implementieren Sie eine yearningTo() -Methode in der Color-Klasse.

Dann nutzen:

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

die similarTo zu implementieren:

Werfen Sie einen Blick auf Color similarity/distance in RGBA color space und finding similar colors programatically. Ein einfacher Ansatz kann sein:

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

Und:

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

Allerdings sollten Sie Ihr X nach Ihrer Vorstellung ähnlich finden.

0

prüfen Sie diesen Link helfen.
How to match similar colours in Java using getRGB
Sie können über Farbähnlichkeit in diesem Thema finden.

+0

Wenn es geholfen hat, warum ist es -1? – Alex

+0

Verpatzung für die -1 (Jede Antwort auf dieser Seite hat -1), aber wenn Sie denken, dass eine existierende Antwort in einer anderen Frage genau diese Frage beantworten kann, markieren Sie sie beim nächsten Mal als Duplikat. Ich denke, das ist der Grund für den Downvote. @MichaelArdan – StarPinkER

4

Ich versuchte dies und es funktionierte sehr gut:

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

Die getRGB Funktion gibt einen int-Wert mit der Summe von Rot Blau und Grün, so dass wir ganze Zahlen sind keine Objekte zu vergleichen.

+3

Das mag stimmen, aber es beantwortet nicht die Frage, nach ähnlichen, nicht nur identischen Farben zu fragen. – Synchro