2013-01-14 33 views
3

我想创建一个函数来给出N等距的RGB颜色。在这种情况下我们如何定义“距离”?那么,我不太确定,但我想用一个color wheel的定义。Java中的色轮给N等距离颜色

Color wheel

因此,如果我可以创建诸如

public Color colorForAngle(int theta) 

然后,我将能够分割360/N,然后提取出的N个等距离的颜色的方法。那有意义吗?任何人都有更好的想法如何在Java中获得等距离的颜色?任何内置的内容都可能有帮助?

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

+0

试试这个问题,它可以帮助你:http://stackoverflow.com/questions/180/function-for-creating-color-wheels – Andremoniy

+0

P.S.而且你的问题比Java相关的算法更多。 – Andremoniy

+0

真的......但我不知道那会是这种情况,因为我认为(也许)Java可能有内置的东西,有人知道...... – CodeGuy

回答

1

这里的重点是没有确切的答案,不同的颜色空间有(略)不同的色轮。我认为用于此目的的“最佳”色彩空间将会是CIELAB,正如在​​的答案中所指出的那样,因为这是为了接近人类视觉而设计的。

但是,Java没有内置的对CIELAB的支持,所以要么你为它写支持,要么你可以说HSB是“足够好”(可能是),并且使用Color.getHSBColor其他答案。

+0

关于背景颜色的任何想法。我选择的颜色应该不同于背景色我提供 – CodeGuy

+0

好吧,如果您使用色轮,所有颜色将具有相同的亮度(HSB亮度与LAB亮度不完全相同,但非常相似),以及根据所选的亮度,我会使用白色或黑色或灰色阴影。不要忘记upvote /接受有用的答案:) – lbalazscs

2

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

安德鲁指出,你可以使用下面的功能:Color.getHSBColor(H,S,B)

+0

其实,在你的问题的第二次阅读,似乎是'colorForAngle'本质上会使用'HSV'表示来返回一个'Color'值,所以我建议阅读维基百科文章以获得更多信息,然后使用任何'RGB'在线实现'HSV'转换很多)来实现你想要的。 –

+0

搜索[图片为'color + wheel + hsv'](https://www.google.com.au/search?q=color+wheel+hsv&hl=zh-CN&safe=off&client=firefox-a&hs=Hxf&t​​bo=d&rls= org.mozilla:en-US:official&source = lnms&tbm = isch&sa = X&ei = j7XzUI_pKayciAeLm4CwCw&ved = 0CAoQ_AUoAA&biw = 1012&bih = 975)将支持您的方法,与OP提供的示例相似。另请看['Color.getHSBColor(H,S,B)'](http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#getHSBColor%28float,%20float ,%20float%29)。 –

-1

嗯,我不能说一个车轮,但长期回我写了一个动画,当我改变了颜色的特定time.The主后行:

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