【发布时间】:2015-02-09 01:01:51
【问题描述】:
RGB 三元组中每个值的 RGB 颜色值范围为 0-255。为什么 ncurses 使 RGB 三元组中的每个值的范围为 0-1000?有没有一种简单的方法可以将 0-255 范围转换为 0-1000 范围,从而使颜色在 0-255 范围内保持真实?
【问题讨论】:
RGB 三元组中每个值的 RGB 颜色值范围为 0-255。为什么 ncurses 使 RGB 三元组中的每个值的范围为 0-1000?有没有一种简单的方法可以将 0-255 范围转换为 0-1000 范围,从而使颜色在 0-255 范围内保持真实?
【问题讨论】:
Curses 从头开始构建 独立于终端,并且包括您希望使用的任何颜色编码方案。有些终端可能只提供十六种固定颜色,有些可能是灰度,有些可能是严格的黑白,有些可能提供数万亿种颜色。
来自SCO documentation(原始 SCO,而不是成为开源世界贱民的重命名的 Caldera):
与其他 curses 一样,颜色处理例程被设计为独立于终端。但必须记住,终端的功能各不相同。
因此,颜色混合能力对于你可以投入的任何东西都被认为是足够好的,允许十亿种不同的混合,然后可以映射到你正在使用的任何终端的实际能力.
一方面,我当然无法区分 #808080 和 #808081 :-)
如果您想将 Curses 的 0-1000 范围转换为更“常规”的范围,您可以执行以下操作:
red = red * 51 / 200; // 51/200 == 255/1000
(其他颜色成分也是如此)。
【讨论】:
最简单的翻译就是乘以 0.255 倍:
r = r * 0.255
g = g * 0.255
b = b * 0.255
至于为什么做出这个决定,我怀疑这完全是武断的,尽管我没有任何事实支持。
【讨论】: