也许我喝了太多咖啡,也许我工作太久了,无论如何,我对这种方法的作用感到茫然,或者更确切地说,为什么以及如何做到这一点,任何人都可以对我有所了解? 下一个颜色是什么?
public Color nextColor() {
int max = 0, min = 1000000000, cr = 0, cg = 0, cb = 0;
for (int r = 0; r < 256; r += 4) {
for (int g = 0; g < 256; g += 4) {
for (int b = 0; b < 256; b += 4) {
if (r + g + b < 256 || r + g + b > 512) {
continue;
}
min = 1000000000;
for (Color c : colorTable) {
int dred = r - c.getRed();
int dgreen = g - c.getGreen();
int dblue = b - c.getBlue();
int dif = dred * dred + dgreen * dgreen + dblue * dblue;
if (min > dif) {
min = dif;
}
}
if (max < min) {
max = min;
cr = r;
cg = g;
cb = b;
}
}
}
}
return new Color(cr, cg, cb, 0x90);
}
更新
感谢大家的回复。查看程序中方法的上下文很明显,他们的意图确实是返回一个新颜色,该颜色与现有颜色集“最远”。
感谢 Sparr 对这个问题提出后续建议,我一定会根据您的建议重写上述内容。
我对 RGB 色标不是很精通。知道上述方法的意图是检索“免费”吗?颜色与现有的一组颜色相比,在我们如何感知颜色的意义上,1中提供的解决方案实际上是互补的吗?有没有一种更简单的方法来选择一种可以补充集合的颜色,或者 RGB 分量的数值分析实际上是否会产生适当的颜色?