15位彩色元件,位移

时间:2011-06-01 15:44:20

标签: c++ bit-shift

好吧,我的位变换仍然有点奇怪。

我有一个16位的值。前15位是颜色,最后一位是alpha。

我用24和32位颜色做了这个没有问题,因为它们是很好的字节大小要处理,但我似乎无法使用15/16位。

这是我过去所做的,有24/32位颜色

(m_colorValue >> RED_CHANNEL) & 0xFF;

我正在尝试将值拆分为4个值。 3个5位颜色值和1个alpha值。 我不知道我应该使用什么口罩。

感谢。

3 个答案:

答案 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;