【问题标题】:Generating a list of colors, blue through red, 0% through 100%生成颜色列表,从蓝色到红色,从 0% 到 100%
【发布时间】:2011-04-08 05:33:21
【问题描述】:

我想创建一个颜色列表,红-黄-绿-蓝,并在 100 种范围内相互融合。有人有这方面的经验吗?

编辑:嗯,实际上是 RGB。任何语言都可以。我只需要算法。

【问题讨论】:

  • 是的!我推荐TemperaGouache,它们最容易混合和水溶性。 Oil 在我的混合经验中是最准确和可预测的,但松节油的恶臭可能很烦人。
  • ... 如果还不够清楚,我想说的是,您至少应该指定一种编程语言或平台、颜色空间(RGB?HSV?CMYK?)并添加一些更相关的标签:P

标签: language-agnostic graphics colors hex


【解决方案1】:

简单的嵌套 RGB 循环不会生成红-黄-绿-蓝渐变。如果这确实是您特别想要的,那么您应该对色轮有所了解:

                    red
                     |
           magenta__ | __yellow
                    \|/
                  __/|\__
              blue   |   green
                     |
                    cyan

这实际上是一个 HSV 色轮,非常适合理解加色。根据这个,你通过混合红色和绿色得到黄色。所以,对于你的渐变:

// in javascript:
function cssColor (r, g, b) {
    return 'rgb('+r+','+g+','+b+')';
}

var colors = [];
// Start with solid red:
var r = 255;
var g = 0;
var b = 0;
// From red to yellow:
for (var g=0;g<=255;g++)  colors.push(cssColor(r,g,b));
// From yellow to green:
for (var r=255;r>=0;r--) colors.push(cssColor(r,g,b));
// From green to blue:
for (var b=0;b<=255;b++,g--)  colors.push(cssColor(r,g,b));

这为您提供了 768 种颜色的数组。如果你使用每八种颜色,你应该得到大约 100 种颜色的数组:

var subColors = [];
for (var i=0;i<colors.length;i++) {
    if (i%8 == 0) subColors.push(colors[i]);
}

不管怎样,利用这些知识,你可以得到任何你想要的渐变。

【讨论】:

    【解决方案2】:

    为您的颜色使用 HSV 颜色空间(红色为 H=0,S=V=1,蓝色为 H=240,S=V=1),在 Hue 值上进行线性插值并将其转换为 RGB:

    http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB

    【讨论】:

      【解决方案3】:

      应该这样做,提供所有 1600 万种左右的颜色。

      int[] colors;
      
      for (int r = 0; i <= 255; i++)
      {
          for (int g = 0; g <= 255; g++)
          {
              for (int b = 0; b <= 255; b++)
              {
                  colors[] = rgb2int(r, g, b);
              }
          }
      }
      
      rgb2int(int red, int green, int blue)
      {
          return (red << 16) + (green << 8) + blue;
      }
      

      【讨论】:

        【解决方案4】:

        3 个嵌套循环。 在 R 上从 1 循环一次到 n 在 g 从 1 到 n 循环一次 在 b 从 1 到 n 循环一次

        应该给你 3^n 左右的颜色 -

        【讨论】:

          猜你喜欢
          • 2013-02-05
          • 1970-01-01
          • 2014-11-03
          • 2017-05-28
          • 1970-01-01
          • 1970-01-01
          • 2014-12-31
          • 1970-01-01
          • 2019-12-14
          相关资源
          最近更新 更多