将 16 位长十六进制值转换为颜色

逆向工程 文件格式 解压 十六进制
2021-06-15 09:44:58

我目前正在尝试对一些游戏文件进行逆向工程。我已经找到了每个图形元素的确切位置,但现在我一直在尝试将它们的数据转换为“可读”的 rgb 代码。它们使用 16 位长的十六进制值(0xC306 或 110000110000 转换为 R:0 G:219 B:24)

该文件是用小端格式编写的。有人能告诉我他们是如何转换的吗?

更多例子:

(0xCFC0 -> RGB 198 24 123)

(0xFFF0 -> RGB 247 28 255)

(0xFF00 -> RGB 0 28 255)

1个回答

它似乎以与您使用标准 5-6-5 位编码给出的字节顺序相反的顺序存储,然后缩放到每个最大 255。

0xC0CF (0b1100000011001111)

R: 24 (0b11000) * 255/31 = 197 G: 6 (0b000110) * 255/63 = 24 B: 15 (0b01111) * 255/31 = 123

0xF0FF (0b1111000011111111)

R: 30 (0b11110) * 255/31 = 247 G: 7 (0b000111) * 255/63 = 28 B: 31 (0b11111) * 255/31 = 255

0x00FF (0b0000000011111111)

R: 0 (0b00000) * 255/31 = 0 G: 7 (0b000111) * 255/63 = 28 B: 31 (0b11111) * 255/31 = 255