3

我想创建一个函数来提供 N 等距 RGB 颜色。在这种情况下,我们如何定义“距离”?好吧,我不太确定,但我正在考虑使用色轮定义。

色轮

因此,如果我可以创建一个方法,例如

public Color colorForAngle(int theta)

然后我就可以划分 360/N,然后提取出 N 种等距的颜色。那有意义吗?任何人都有更好的想法如何在Java中获得等距的颜色?内置的任何东西可能会有所帮助?

这里的重点是找到足够(或尽可能)不同的 N 种颜色。例如,如果 N 为 3,则颜色[255, 0, 0], [0, 255, 0], and [0, 0, 255]看起来尽可能远。

4

3 回答 3

2

这听起来更适合使用HSV而不是RGB,因为从色谱的圆形表示中提取等距颜色将是微不足道的。

正如 Andrew 所说,您可以使用以下功能:Color.getHSBColor(H,S,B)

于 2013-01-14T07:27:55.837 回答
1

这里重要的一点是没有确切的答案,不同的色彩空间有(稍微)不同的色轮。我认为用于此目的的“最佳”色彩空间将是CIELAB ,如对Function for create colour Wheels的回答中所述,因为它旨在接近人类视觉。

但是,Java 没有对 CIELAB 的内置支持,因此您可以编写对它的支持,或者您可以说 HSB“足够好”(可能是这样),并按照其他答案中的说明使用 Color.getHSBColor。

于 2013-01-15T10:49:18.210 回答
-1

好吧,我不能说轮子,但很久以前我写了一个动画,在特定时间后我改变了颜色。主线:

            colorIndex++;  // A number between 0 and 100.
            if (colorIndex > 100)
               colorIndex = 0;
            float hue = colorIndex / 100.0F;  // Between 0.0F and 1.0F.
            display.setColor( Color.getHSBColor(hue,1,1) );
于 2013-01-14T11:27:00.303 回答