如何显示所有可能颜色的网格?

时间:2012-11-29 21:36:58

标签: c# colors grid selector picker

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

enter image description here 每种颜色使用256个值将产生(256 ^ 3 =)16,777,216种可能的颜色,可以排列成(sqrt of 16,777,216 =)4,096 x 4,096 square。

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

3 个答案:

答案 0 :(得分:3)

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

获取与示例中的颜色类似的颜色:

  1. 将饱和度保持为“1”。
  2. 要浏览(不同颜色,红色 - >黄色 - >绿色 - > ETC),请增加“色调”。
  3. 向下(颜色变深)会降低亮度。
  4. Here是关于HSL和HSV色彩空间的文章。在那篇文章中,他们将一些转换算法恢复为RGB,但here是一篇很容易在C中进行转换的文章。

    编辑:one in c#

答案 1 :(得分:1)

由于计算机显示的RGB颜色位于三维空间中,因此无法使用像4kX4k正方形中的链接图像那样的布局来所有可能的颜色。这就是为什么图形程序中有不同的颜色模型,它们通常显示三个值选择器,或者至少将一个维度拉出到线性选择器控件,并将其他两个维度保留为平方控件。

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

链接的图像完全错过了灰色。它实际上是HSL色彩空间中Hue和Lightness的组合选择器。具有强烈色彩的中间线可以通过开始一种基色,逐步添加下一种基色,当达到减少第一种颜色的最大值,然后使用相同的图案转换到第三种颜色,最后回到第一种颜色。在通往顶部的路上,有一条线性过渡到白色,在下降到黑色的过程中。

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

如果你真的想要平方空间的所有颜色,你可以创建256x256大小的块,一次又一次地重复添加第三种颜色。

答案 2 :(得分:0)

一般来说,在平面上表示三维空间是很难的,特别是如果你想要看到一些非透明的云......那么降低强度可能只是一种方法。

研究HSI / HSL / HSV - http://en.wikipedia.org/wiki/HSI_color_space