循环遍历所有RGB值

3

每个(红色、绿色和蓝色)的rgb范围为0-255意味着应该有256x256x256种可能的rgb颜色值。

我该如何循环并打印出每一个值?

我还不需要特定的顺序,只是想知道如何遍历并获取所有值而不跳过任何一个。


如何使用循环(或多个循环)? - undefined
2个回答

8

您可以简单地使用3个嵌套循环:

var red, green, blue;

for (red = 0; red <= 255; red++) {
    for (green = 0; green <= 255; green++) {
        for (blue = 0; blue <= 255; blue++) {
            // rgb(red, green, blue)
        }
    }
}

订单:

 R  |  G  |  B
---------------
  0 |   0 |   0
  0 |   0 |   1
  0 |   0 |   2
...............
255 | 255 | 253
255 | 255 | 254
255 | 255 | 255

另一种方法是使用循环,循环次数为 256 * 256 * 256 (16777216):

var red, green, blue;

for (var rgb = 0; rgb <= 16777216; rgb++) {
    red   = (rgb >> 16) & 0xFF;
    green = (rgb >> 8) & 0xFF;
    blue  = (rgb) & 0xFF;

    // rgb(red, green, blue)
}

这里的顺序将会是:

 R  |  G  |  B
---------------
  0 |   0 |   0
  1 |   0 |   0
  2 |   0 |   0
...............
253 | 255 | 255
254 | 255 | 255
255 | 255 | 255

然而,性能不会很好,因为您将使用大量的逻辑。


网站无法运行这么长的循环...错误:检测到无限循环(或循环时间过长),因此我们停止了它的执行。抱歉! - undefined
通过增加2、4、8或16来减少所需时间。 - undefined
为了减少用户锁定和长时间运行错误,将其转换为函数,并在第一个循环结束的地方添加setTimeout(functionName, 1)。 - undefined

2
以下嵌套循环可完成此操作。
var r;
var g;
var b;
for ( r = 0; r <= 255; r++ )
{
  for ( g = 0; g <= 255; g++ )
  {
    for ( b = 0; b <= 255; b++)
    {
      // output values of r, g and b
    }
  }
}

谢谢提示,我会进行修改。 - undefined

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