how could i compare colors in java?

后端 未结 2 1981
清酒与你
清酒与你 2020-12-10 15:28

im trying to make a random color generator but i dont want similar colors to show up in the arrayList

public class RandomColorGen {

public static Color Rand         


        
相关标签:
2条回答
  • 2020-12-10 16:20

    I tried this and it worked very well:

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

    The getRGB function returns an int value with the sum of Red Blue and Green, so we are comparing integers not objects.

    0 讨论(0)
  • 2020-12-10 16:32

    Implement a similarTo() method in Color class.

    Then use:

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

    To implement the similarTo:

    Take a look at Color similarity/distance in RGBA color space and finding similar colors programatically. A simple approach can be:

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

    And:

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

    However, you should find your X according to your imagination of similar.

    0 讨论(0)
提交回复
热议问题