尝试破译RGB值如何计算整数值

问题描述 投票:0回答:1

我目前正在查看一些非常旧的遗留代码,不幸的是没有任何文档/注释。我有一个调色板文件,其中包含以逗号分隔的文件中的 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)。

为了了解更多上下文,整数值用于将颜色应用于灰度图像。上面的条目来自青铜调色板。

colors rgb rgba palette
1个回答
0
投票

由于某种原因,它们存储时顶部字节设置为 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 等值之间进行线性插值以获得更好的外观。

© www.soinside.com 2019 - 2024. All rights reserved.