有 256 种可用的终端颜色转义:
- 8 种“系统”颜色 (0 - 7)
- 8 种“明亮”的系统颜色 (8 - 15)
- 216,即 6*6*6 “RGB” 颜色 (16 - 231)
- 24 种“灰度”颜色 (232 - 255)
我对“RGB”颜色感到好奇。
前六种颜色(从 16 到 21)映射到以下十六进制 RGB 值:
- 16:000000
- 17:000054
- 18:000087
- 19:0000 时
- 20:0000d7
- 21:0000ff
现在仅显示蓝色值(以十进制表示):
- 16:0
- 17:84
- 18:135
- 19:175
- 20:215
- 21:255
换句话说,RGB 值增加 84,然后增加 51(84 + 51 = 135),然后剩余 40。
这个从 0 到 255 的 6 个值的循环重复 36 次,首先是蓝色,然后是绿色,然后是红色,最终形成 216 种终端颜色的“立方体”:
我的问题是:为什么?
有人知道这是否有历史/技术原因吗?或者这只是决定颜色代码含义的人的武断决定?这种映射是在 RGB 成为通用惯例之前就存在的吗?为什么不增加 42、42、42、43、43、43?
答案1
从这个意义上讲,它是“任意的”:开发人员选择将 256 种颜色的集合分开,保留前 16 种颜色以满足现有用途,然后注意到他可以在忽略一个合适大小的立方体后得到一个立方体灰度坡道。两位开发人员(256 或 88)都没有参考人为因素出版物。他们只是为了方便计算和“看起来不错”而选择了颜色的台阶。
此类技术细节请参阅 xterm FAQ我可以通过数字来设置颜色吗?
答案2
我在大学上过一门课,有人告诉我,人眼可以检测到任何一种颜色的大约 256 种色调 [或非常接近,一个字节就可以有效匹配],因此三原色中的每一种 256 种就可以提供人眼可以看到的所有颜色。其余的我不确定。
答案3
egmont 的评论给出了一个提示:
但我真的不确定这在人眼看来是否分布均匀。
下面是网络安全调色板与终端颜色的比较。
尝试从左下角(绝对绿色)到右上角(绝对蓝色)描摹颜色。如果您发现终端调色板更自然地混合颜色,那么您可能是对的。如果您发现很难看出颜色如何因周围颜色而变化,我在左下角准备了两行黑蓝渐变,在右下角准备了两行绿蓝渐变。顶行对应于线性 RGB 值,而底行是终端调色板使用的(注意:我使用的是问题中指定的调色板)。
终端调色板中的值的选择实际上是基于伽马校正。您可能想看看 Minute Physics 的关于此主题的视频。基本上,与明亮区域相比,我们能够更好地感知到暗区域的亮度增加。因此,不是将亮度值线性分配给实际光强度,而是进行映射,以便在将颜色保存为数据时,深色覆盖更大范围的值。
观察图片中的黑蓝渐变,我们发现顶行偏向深蓝色,而底行则分布得更均匀。同时,绿蓝渐变中顶行中间部分似乎比边缘部分更暗,而底行的过渡似乎更平滑。