我目前正在查看一些非常旧的遗留代码,不幸的是没有任何文档/注释。我有一个调色板文件,其中包含以逗号分隔的文件中的 rgb 值,以及根据这些值计算的整数。我无法确定这些整数是如何计算的。
这是前 12 条和后 8 条条目。 “=”左边是 R、G、B 值,右边是计算出的整数值。
0.) 0,0,0 = -16777216
1.) 0,0,0 = -16777216
2.) 0,0,0 = -16777216
3.) 0,0,0 = -16777216
4.) 43,7,0 = -13957376
5.) 43,7,0 = -13957376
6.) 43,7,0 = -13957376
7.) 43,7,0 = -13957376
8.) 69,15,0 = -12251392
9.) 69,15,0 = -12251392
10.) 69,15,0 = -12251392
11.) 69,15,0 = -12251392
.
.
.
248.) 254,240,0 = -69632
249.) 254,240,0 = -69632
250.) 254,240,0 = -69632
251.) 254,240,0 = -69632
252.) 255,248,0 = -2048
253.) 255,248,0 = -2048
254.) 255,248,0 = -2048
255.) 255,248,0 = -2048
有人看到这里的规律了吗?这是一个常见的色彩理论概念吗?我所能确定的是,255 * 255 * 255 = 16777216 个可能的值(因为 R、G、B 可以是 0-255)。
为了了解更多上下文,整数值用于将颜色应用于灰度图像。上面的条目来自青铜调色板。
由于某种原因,它们存储时顶部字节设置为 0xff,因此您看到的是负数,但其他情况下是 0xff RR GG BB 形式的正常调色板值。映射非常清晰并且很常见。
将它们视为无符号 32 位整数并以十六进制显示将使事情变得清晰:
0.) 0 0 0 = -16777216 FF000000
1.) 0 0 0 = -16777216 FF000000
2.) 0 0 0 = -16777216 FF000000
3.) 0 0 0 = -16777216 FF000000
4.) 43 7 0 = -13957376 FF2B0700
8.) 69 15 0 = -12251392 FF450F00
[snip]
248.) 254 240 0 = -69632 FFFEF000
252.) 255 248 0 = -2048 FFFFF800
255.) 255 248 0 = -2048 FFFFF800
这是一个非常平淡的调色板,有 4 个唯一值映射到相同的颜色,因此实际使用的 256 种可能颜色中只有 64 种。我希望出于与古董硬件向后兼容的原因。您可能希望在 0、4、8 等值之间进行线性插值以获得更好的外观。