好吧,我的位变换仍然有点奇怪。
我有一个16位的值。前15位是颜色,最后一位是alpha。
我用24和32位颜色做了这个没有问题,因为它们是很好的字节大小要处理,但我似乎无法使用15/16位。
这是我过去所做的,有24/32位颜色
(m_colorValue >> RED_CHANNEL) & 0xFF;
我正在尝试将值拆分为4个值。 3个5位颜色值和1个alpha值。 我不知道我应该使用什么口罩。
感谢。
答案 0 :(得分:3)
如果我理解正确:
red = (packed >> 0) & 0x1F;
green = (packed >> 5) & 0x1F;
blue = (packed >> 10) & 0x1F;
alpha = (packed >> 15) & 0x01;
打包应该更好是一个未签名的,我可能会关闭订单。
答案 1 :(得分:1)
使用位移。
ushort s;
ushort b= s&0x1F // first five bits
ushort g= (s>>5)&0x1F // second five bits
等...
答案 2 :(得分:1)
您的问题非常模糊,但如果您尝试从RGB1555中提取单个颜色组件,这应该可以解决问题:
unsigned short color;
const unsigned int
a = color & 0x8000,
r = color & 0x7C00,
g = color & 0x03E0,
b = color & 0x1F;