一尘不染

值作为颜色表示

algorithm

将值转换为颜色是众所周知的,我确实了解以下两种方法(在更改rgb颜色值以表示值时对此进行了很好的描述)

  1. 值以灰色阴影表示
  2. 作为基础颜色的亮度的值(例如,蓝色的亮度

但是,当我想使用全色范围(“所有颜色”)时,最佳算法是什么?当我将“灰色”与8位RGB值一起使用时,实际上确实具有256个阴影(白色至黑色)的表示。但是,如果我使用整个范围,则可以使用更多的阴影。像这样的东西。同样,这将更容易识别。

基本上我需要用Javascript编写算法,但是我想所有代码(例如C#,Java,伪代码)也可以。底部的图例显示了编码,我正在为此寻找算法。

因此,具有一个值范围(例如1-1000),我可以将1表示为白色,将1000表示为黑色,但是我也可以将1表示为黄色,将1000表示为蓝色。但是,对此有标准的算法吗?查看此处的示例,可以看到它们使用颜色间隔。我不仅要使用灰色或更改亮度,还要使用所有颜色。

这是视觉演示(需要Flash)。给定颜色方案中表示的值,我的目标是计算颜色。

我确实有线性的颜色范围,例如1-30000

-更新-

在这里,我发现这里有一个叫做LabSpace的东西:

实验室空间是一种表示颜色的方法,其中彼此靠近的点就是人类看上去彼此相似的点。

因此,我需要一种算法来表示此实验室空间中的线性值。


阅读 487

收藏
2020-07-28

共1个答案

一尘不染

有两种指定颜色的基本方法。一个是预先定义的颜色列表(调色板),然后您的颜色值就是该列表的索引。这就是旧的8位彩色系统如何工作以及GIF图像仍如何工作。有网络安全颜色的列表,例如http://en.wikipedia.org/wiki/Web_colors,通常适合8位值。通常相似的颜色是相邻的,但有时不是。调色板的优点是每个像素需要少量数据,但缺点是同时显示在屏幕上的不同颜色数量有限。

另一种基本方法是指定颜色的坐标。一种方法是RGB,每种原色都有单独的值。另一个是色相/饱和度/亮度。CMYK(青色,品红色,黄色,有时是黑色)用于打印。这就是通常所说的本色,当您使用诸如“所有颜色”之类的短语时,听起来您正在寻找这样的解决方案。对于渐变色,这样的HSL可能非常适合您。例如,从颜色到灰色的渐变只会降低饱和度值。如果只需要“纯”颜色,则固定饱和度和亮度值并更改色相。几乎所有绘图系统都需要RGB,但是从HSL到RGB的转换很简单。http://en.wikipedia.org/wiki/HSL_and_HSV

如果您不能保留每种颜色的全部24位(每种颜色8位,32位颜色相同,但添加了透明通道),则可以使用15或16位颜色。这是一回事,但是不是每种颜色使用8位,而是每种颜色获得5(15位)或5-6-5(16位,绿色获得了额外的位,因为我们的眼睛对绿色阴影更敏感)。这适合一个短整数。

2020-07-28