2

如何按逻辑顺序创建所有可能的 RGB 颜色组合的网格?像这样的东西:

在此处输入图像描述 每种颜色使用 256 个值将产生 (256^3=) 16,777,216 种可能的颜色,这些颜色可以排列成(16,777,216 的平方=)4,096 x 4,096 的正方形。

我知道如何制作一组颜色然后显示它们,但我要的是在颜色之间进行平滑过渡的逻辑。

4

3 回答 3

4

不要在 RGB 中思考,在 HSL(色相、饱和度、亮度)或 HSV 颜色空间中思考。它们更接近人类认为彼此“接近”的东西。

要获得与示例中的颜色类似的颜色:

  1. 将饱和度保留为“1”。
  2. 要穿过(不同的颜色,RED->YELLOW->GREEN->ETC),增加“Hue”。
  3. 往下走(颜色变深的地方)会降低亮度。

是一篇关于 HSL 和 HSV 颜色空间的文章。在那篇文章中,他们有一些转换回 RGB 的算法,但这里有一篇关于 C 语言转换的简单文章。

编辑:还有一个在 c#

于 2012-11-29T21:53:29.827 回答
1

您无法通过 4kX4k 正方形上的链接图像中的排列来获得所有可能的颜色,因为计算机显示的 RGB 颜色位于三维空间中。这就是为什么图形程序中有不同的颜色模型,它们通常显示三个值选择器,或者至少将一个维度拉到线性选择器控件中,而将其他两个维度留在平方控件中。

有时您还会看到六边形控件或三角形颜色的排列以及单独的亮度选择器。

链接的图像完全错过了灰色。它实际上是 HSL 颜色空间中色相和亮度的组合选择器。可以很容易地确定具有强烈颜色的中间线,从一个基色开始,逐步添加下一个基色,当达到最大值时减少第一个颜色,然后以相同的模式过渡到第三个,最后回到第一种颜色。在通往顶部的路上,有一个到白色的线性过渡,在向下到黑色的路上。

最后,您在颜色空间中的六个边界平面上拥有所有颜色,但平面之间的整个空间尚未覆盖。为此,您需要一个单独的颜色饱和度选择器。从最大水平降低饱和度覆盖灰色。

如果你真的想要一个正方形空间上的所有颜色,你可以创建大小为 256x256 的块,这些块一次又一次地重复,并稍微添加第三种颜色。

于 2012-11-29T22:23:47.020 回答
0

一般来说,在平面上表示 3d 空间是很困难的,特别是如果你想看到一些不透明的云......所以降低强度可能是一种方法。

查看 HSI/HSL/HSV - http://en.wikipedia.org/wiki/HSI_color_space

于 2012-11-29T21:55:26.680 回答