如何显示所有可能颜色的网格?
Posted
技术标签:
【中文标题】如何显示所有可能颜色的网格?【英文标题】:How can I display a grid of all possible colors? 【发布时间】:2012-11-29 21:36:58 【问题描述】:如何按逻辑顺序创建所有可能的 RGB 颜色组合的网格? 像这样的:
每种颜色使用 256 个值将产生 (256^3=) 16,777,216 种可能的颜色,这些颜色可以排列成(16,777,216 的平方=)4,096 x 4,096 的正方形。
我知道如何制作一组颜色然后显示它们,但我要求的是在颜色之间进行平滑过渡背后的逻辑。
【问题讨论】:
你想创建一个color tool。颜色是一个非常有趣但很复杂的事情......玩得开心:D 【参考方案1】:不要考虑 RGB,要考虑 HSL(色相、饱和度、亮度)或 HSV 颜色空间。它们更接近于人类认为彼此“接近”的东西。
要获得示例中的颜色:
-
将饱和度保留为“1”。
要穿过(不同的颜色,RED->YELLOW->GREEN->ETC),增加“Hue”。
向下(颜色变深)降低亮度。
Here 是一篇关于 HSL 和 HSV 颜色空间的文章。在那篇文章中,他们有一些转换回 RGB 的算法,但here 是一篇非常简单的 C 转换文章。
编辑:one in c#
【讨论】:
这不会是所有可能的颜色。您将忽略所有饱和变体。您需要 16m+ 像素才能查看所有内容,尽管您无法在 2D 空间中连续表示它们。【参考方案2】:您无法通过 4kX4k 正方形上的链接图像中的排列方式达到所有种可能的颜色,因为计算机显示的 RGB 颜色位于三维空间中。这就是为什么图形程序中存在不同颜色模型的原因,它们通常显示三个值选择器,或者至少将一个维度拉到线性选择器控件中,而将其他两个维度保留在平方控件中。
有时您还会看到六边形控件或三角形颜色的排列以及单独的亮度选择器。
链接的图像完全错过了灰色。它实际上是 HSL 颜色空间中色相和亮度的组合选择器。可以很容易地确定具有强烈颜色的中间线,从一个基色开始,逐步添加下一个基色,当达到最大值时减少第一个颜色,然后以相同的模式过渡到第三个,最后回到第一种颜色。在到达顶部的过程中,有一个到白色的线性过渡,在下降到黑色的过程中。
最后,您在颜色空间中的六个边界平面上拥有所有颜色,但平面之间的整个空间尚未覆盖。为此,您需要一个单独的颜色饱和度选择器。从最大级别降低饱和度会覆盖灰色。
如果您真的想要一个正方形空间上的所有颜色,您可以创建大小为 256x256 的块,这些块会反复重复,并稍微添加第三种颜色。
【讨论】:
【参考方案3】:一般来说,在平面上表示 3d 空间是很困难的,尤其是如果你想看到不透明的云中的东西......所以降低强度可能是一种方法。
查看 HSI/HSL/HSV - http://en.wikipedia.org/wiki/HSI_color_space。
【讨论】:
以上是关于如何显示所有可能颜色的网格?的主要内容,如果未能解决你的问题,请参考以下文章