我试图制作一个随机颜色生成器,但我不希望类似的颜色显示在arrayList
中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;
}
}
我真的很困惑请帮助:)。
答案 0 :(得分:12)
在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;
}
实现similarTo:
查看Color similarity/distance in RGBA color space和finding similar colors programatically。一个简单的方法可以是:
((r2-r1) 2 +(g2-g1) 2 +(b2-b1) 2 ) 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.
答案 1 :(得分: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值,因此我们比较的是整数而不是对象。
答案 2 :(得分:0)
检查此链接。
How to match similar colours in Java using getRGB
您可以在此主题中找到有关颜色相似性的内容。