ncurses:为什么 RGB 颜色值的范围是 0 - 1000?

ncurses: Why is the RGB color value range from 0 - 1000?

RGB 三元组中每个值的 RGB 颜色值范围为 0-255。为什么 ncurses 为 RGB 三元组中的每个值设置范围 0-1000?是否有一种简单的方法可以将 0-255 范围转换为 0-1000 范围,从而使颜色在 0-255 范围内保持真实?

最简单的翻译就是将它乘以 0.255:

r = r * 0.255
g = g * 0.255
b = b * 0.255

至于为什么做出这个决定,我怀疑这完全是武断的,尽管我没有任何事实支持。

Curses 是从头开始构建的,与终端无关,包括您希望使用的任何颜色编码方案。有些终端可能只提供十六种固定颜色,有些可能是灰度,有些可能是严格的黑白,有些可能提供万亿种颜色。

来自SCO documentation原始 SCO,而不是成为开源世界贱民的重命名的 Caldera):

Like the rest of curses, the color manipulation routines have been designed to be terminal independent. But it must be remembered that the capabilities of terminals vary.

因此,颜色混合能力被认为足以满足您的任何要求,允许十亿种不同的混合,然后可以映射到任何东西的实际能力您正在使用的终端。

我,一方面,肯定无法区分 #808080#808081 :-)

如果您想将 0-1000 范围的 Curses 转换为更大的 "conventional" 范围,您可以这样做:

red = red * 51 / 200;  // 51/200 == 255/1000

(其他颜色分量同上)。