Color mutateColor(int range){
int r = a.getRed() + (int)(Math.random() * 2 * range - range);
r = Math.min(255, Math.max(0, r));
int g = a.getGreen() + (int)(Math.random() * 2 * range - range);
g = Math.min(255, Math.max(0, g));
int b = a.getBlue() + (int)(Math.random() * 2 * range - range);
b = Math.min(255, Math.max(0, b));
return new Color(r, g, b);
}
double colorDist(Color e1, Color e2){
long rmean = ( (long)e1.getRed() + (long)e2.getRed() ) / 2;
long r = (long)e1.getRed() - (long)e2.getRed();
long g = (long)e1.getGreen() - (long)e2.getGreen();
long b = (long)e1.getBlue() - (long)e2.getBlue();
return Math.sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}
# 1 楼答案
当涉及到以编程方式调整颜色值时,你有很多选择。一个非常简单的解决方案是简单地随机偏移颜色对象的通道值。将其视为变异颜色——只需选择你想要变异的颜色,并从中生成更多颜色:
这是最简单的例子,给出了一个范围,每个通道都被该范围偏移,结果如下:
这是在范围值为10的情况下完成的。为了增加控制,可以向mutateColor函数添加三个参数(每个通道的偏移量)。也可以选择一个范围,但根据通道中已有的值进行更改。例如:
这只是许多其他可能性之一
如果你想用公差比较两种颜色,我从fredley的链接中移植了代码,它可以很好地获得两种颜色之间的差异:
# 2 楼答案
比较颜色是not a trivial problem,有各种不同的衡量标准
我无法(轻松地)找到一个能做到这一点的库,但如果你进行彻底的搜索,我肯定会找到一些东西。与此同时do some reading!# 3 楼答案
我不知道这个技术定义可能意味着什么。不过,您可以使用HSL Color创建自己的定义
基本上,我想你可以先确定每种颜色的色调是+/-一个固定的度数。然后你可以通过检查饱和度和/或光度是否在你想要的范围内来进一步缩小范围