对于 ARGB 颜色图,我有四个整数值 (0 - 255)。
现在我想制作这四个整数的唯一浮点数或整数。是否可以像下面那样做?
sum = 4 * 255 + A;
sum += 3 * 255 + R;
sum += 2 * 255 + G;
sum += 1 * 255 + B;
值(value)真的是独一无二的吗?
最佳答案
您正在尝试进行基本转换或类似的操作。无论如何,逻辑就像在基本转换中一样。
4 字节 = 32 位。所以 32 位无符号整数会做得很好。
在这种情况下,您有:
ARGB = A<<24 + R<<16 + G<<8 + B
就像这样:
你有 4 个字节的数据,意思是
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
其中 X 是 1 或 0 值位。你可以这样映射它们:
AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
然后你所要做的就是添加它们,但在此之前你需要移动位。你转移了
A
位向左移动 8*3(超出 R
、 G
和 B
位的限制),然后将 R
移位位乘以 8*2,依此类推。您最终添加了这些 32 位整数:
AAAAAAAA 00000000 00000000 00000000
00000000 RRRRRRRR 00000000 00000000
00000000 00000000 GGGGGGGG 00000000
00000000 00000000 00000000 BBBBBBBB
哪里
A
, R
, G
, B
可以是 0
或 1
,并作为一个整体表示 channel 的 8 位值。然后您只需将它们相加,即可获得结果。或作为 DarkDust写道,不要使用 +
运算符,而是 |
(按位或)运算符,因为在这种特殊情况下它应该更快。
关于rgb - 如何将 ARGB 唯一地打包为一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7358533/