将彩虹颜色映射到RGB

时间:2011-04-01 12:57:19

标签: java rgb

假设我有一个带有构造函数RainbowColorsMapper(int n)的类RainbowColorsMapper,其中n> = 2。现在我希望连续映射彩虹色从红色到紫色,我使用方法mapper.getColor(int number),其中低值对应红色末端,高度近红色到紫​​色末端。如果n = 2,则mapper.getColor(0)返回光谱的大部分左侧颜色(接近红色),mapper.getColor(1)返回最正确的颜色。与自动缩放的较大n相同。

我的问题:这可以相对容易地完成,如果是,那么算法的建议是什么?

6 个答案:

答案 0 :(得分:7)

最简单的方法是使用HSL colourspace而不是RGB。创建饱和度和亮度固定的颜色(我建议为100%和50%),色调在合适的端点(您可能需要尝试查找)之间变化。使用Color.getHSBColor将HSL值转换为RGB。

答案 1 :(得分:1)

请记住,彩虹的颜色是根据波长排序的,所以基本上在你的模型中,n与波长有某种关系。所以你的问题基本归结为将波长(n)映射到RGB。这不是一个完全无关紧要的过程,但首先,您可以查看这个问题:

Convert light frequency to RGB?

答案 2 :(得分:0)

或使用Hue饱和度值颜色模型,并迭代Hue。

答案 3 :(得分:0)

颜色模型

中的色调基本上从0变为300

How to calculate RGB from Hue you can find on Wikipedia

答案 4 :(得分:0)

一旦你弄明白,它就相当容易了。 下面的代码将允许您循环使用所有现有的rbg颜色

  private int r=255;
  private int g=0;
  private int b=0;
  private void nextRGB()
  {
    if ( r == 255 && g < 255 && b == 0 )
      {
      g++;
      }
    if ( g == 255 && r > 0 && b == 0 )
      {
      r--;
      }
    if ( g == 255 && b < 255 && r == 0 )
      {
      b++;
      }
    if ( b == 255 && g > 0 && r == 0 )
      {
      g--;
      }
    if ( b == 255 && r < 255 && g == 0 )
      {
      r++;
      }
    if ( r == 255 && b > 0 && g == 0 )
      {
      b--;
      }
  }
  public Color nextColor()
  {
  nextRGB();
  return makeColor();
  }

  private Color makeColor()
  {
    return new Color(r, g, b);
  }

答案 5 :(得分:0)

HSL Color可让您轻松完成此操作。