在Java中创建一个颜色轮,以提供N个等距离的颜色。

3
我希望创建一个函数来生成N个等距离的RGB颜色。在这种情况下,“距离”如何定义?我不太确定,但是我考虑使用彩色轮盘定义。 Color wheel 因此,如果我能创建一个方法
public Color colorForAngle(int theta)

然后我就可以将360/N分成若干份,并提取出N个相等距离的颜色。这样说清楚了吗?有没有更好的方法来获取Java中的等间距颜色呢?是否有任何内置函数可以帮助?重点是要找到N种足够不同(或尽可能不同)的颜色,例如,如果N为3,则颜色[255, 0, 0], [0, 255, 0]和[0, 0, 255]似乎是最远的。

请尝试这个问题,它可能会对您有所帮助:https://dev59.com/EXVD5IYBdhLWcg3wXamd - Andremoniy
PS. 你的问题更偏向算法而非Java相关。 - Andremoniy
是的...但我不知道那会是这种情况,因为我认为(或许)Java可能有一些内置的东西,有人知道... - CodeGuy
3个回答

2
这似乎更适合使用HSV而不是RGB,因为从颜色光谱的圆形表示中提取等距离的颜色将非常容易。
正如安德鲁所指出的那样,您可以使用以下函数:Color.getHSBColor(H,S,B)

实际上,在第二次阅读您的问题时,似乎colorForAngle本质上会使用HSV表示法来返回一个Color值,因此我建议阅读维基百科文章以获取更多信息,然后使用在线的任何RGBHSV转换实现(有很多)来实现您想要的效果。 - Alex DiCarlo
图像搜索'color+wheel+hsv'上查找可以通过与OP提供的示例的相似性来支持您的方法。还要查看Color.getHSBColor(H,S,B) - Andrew Thompson

1
重要的一点是,没有确切的答案,不同的颜色空间有(稍微)不同的颜色轮。我认为,作为CIELAB的最佳颜色空间,正如在创建颜色轮的函数的答案中所指出的那样,因为它旨在近似人类视觉。
然而,Java没有内置的CIELAB支持,因此您可以编写其支持,或者您可以说HSB已经“足够好”(可能是),并使用其他答案中提到的Color.getHSBColor。

有没有关于背景颜色的想法?我选择的颜色应该与我提供的背景颜色有所区别。 - CodeGuy
如果您使用颜色轮,所有颜色的亮度将相同(HSB亮度与LAB亮度不完全相同,但非常相似),我会根据所选亮度使用白色、黑色或灰色阴影。别忘了点赞/接受有帮助的答案 :) - lbalazscs

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接