南京市江宁区秦淮路100号海通大厦26楼 j9pingtai@aglaoge.vip

游戏动态

颜色压成五六五位后怎样还原并计算误差:状态推演第10例

2026-11-12

缩小颜色存储位数会减少可表示的颜色层级。五六五位格式给绿色更多一级精度,但它仍然会丢失信息,不能把解码后的颜色当成原始颜色逐字节恢复。

先把规则写清楚

本例输入红绿蓝均为零至二百五十五整数。红蓝映射到零至三十一,绿色映射到零至六十三,采用四舍五入且恰好一半向上;再把红放最高五位、绿放中间六位、蓝放最低五位,组成十六位整数。

本例输入与推演结果

输入与解码后的通道顺序均为红、绿、蓝,十六位整数按数值列出,不涉及文件字节顺序。

原颜色 | 五六五编号 | 十六进制数 | 解码颜色 | 有符号误差 [0, 0, 0] | [0, 0, 0] | 0000 | [0, 0, 0] | [0, 0, 0] [255, 255, 255] | [31, 63, 31] | FFFF | [255, 255, 255] | [0, 0, 0] [102, 182, 64] | [12, 45, 8] | 65A8 | [99, 182, 66] | [-3, 0, 2] [219, 252, 203] | [27, 62, 25] | DFD9 | [222, 251, 206] | [3, -1, 3] [184, 125, 60] | [22, 31, 7] | B3E7 | [181, 125, 58] | [-3, 0, -2] [132, 65, 81] | [16, 16, 10] | 820A | [132, 65, 82] | [0, 0, 1] [36, 235, 17] | [4, 58, 2] | 2742 | [33, 235, 16] | [-3, 0, -1] [48, 125, 181] | [6, 31, 22] | 33F6 | [49, 125, 181] | [1, 0, 0] [144, 119, 198] | [18, 29, 24] | 93B8 | [148, 117, 197] | [4, -2, -1] [89, 115, 10] | [11, 28, 1] | 5B81 | [90, 113, 8] | [1, -2, -2] [241, 68, 90] | [29, 17, 11] | EA2B | [239, 69, 90] | [-2, 1, 0] [166, 228, 156] | [20, 56, 19] | A713 | [165, 227, 156] | [-1, -1, 0]

这里的编号只用来辨认本例中的对象,不能当成另一份记录里的固定身份。阅读表格时先找到输入,再顺着运算顺序对照输出;空列表、零值和不存在的结果有不同含义,不能混用。表中分数保留精确值,小数显示仅为阅读方便。

怎样自己复核

解码先用位移和掩码取出三个小整数,再按各自最大值比例映回零至二百五十五并用同一舍入规则。误差定义为还原值减输入值,同时给出绝对误差,负值表示还原后变暗。

对黑色、白色和各通道端点单独检查,应该准确还原。若编码时只截掉低位而解码却按本例比例四舍五入,结果会与本表不同,因此要把量化规则写清。将同一个已解码颜色重新编码,应该回到同一组五六五位编号。

适用范围

这里讨论的是三个数值通道的量化,不进行颜色空间线性化,也不声称数字误差等同人眼感知差异。格式本身没有透明度;实际文件的字节顺序还须另外约定,十六位数值相同不代表两字节排列一定相同。

本例是一套可复现的游戏机制练习,不依赖具体品牌或某个软件的默认设置。修改任何边界约定、输入参数或操作顺序后,应重新推演并保存中间状态。发现差异时先定位第一处不一致,再判断是规则不同还是计算错误,不要只把最终答案调整到看起来相同。