如果存在整数值,例如。 86那么我如何从这个整数值中提取r,g,b分量....? 我正在研究Visual C ++ 2008 express版。 感谢..
答案 0 :(得分:11)
通常(我通常会重复,因为你没有在你的问题中指定太多),颜色是用RGBA组件的4字节整数打包的。
您需要做的是掩饰和移动,例如:
int color = 0xRRGGBBAA;
u8 red = (color & 0xFF000000) >> 24;
u8 green = (color & 0x00FF0000) >> 16;
u8 blue = (color & 0x0000FF00) >> 8;
这假定我指定的编码类型,但可以根据您的编码进行修改。
修改强> 在您的示例中,您谈到了0-255的值。目前尚不清楚组件是否为2位大小(每个组件有4个强度值)。
在这种情况下,方法仍然保持不变,但你只有几种颜色:
u8 color = 86;
// so you take 2 bits and multiply by 64 to possibly have intensities: 0, 64, 128, 192
u8 red = ((color & 0xC0) >> 6) * 64;
u8 green = ((color & 0x30) >> 4) * 64;
u8 blue = ((color & 0x0C) >> 2) * 64;
EDIT2:也许你的颜色用调色板编入索引,在这种情况下你应该有一个存储调色板本身的数组,你从文件中读取的字节应该是存储在某个地方的颜色的索引其他
答案 1 :(得分:0)
通常,您希望使用RGB
宏从三个组件创建颜色。假设您拥有的价值采用相同的格式,您可以使用GetRValue
,GetGValue
和GetBValue
将其拆分为单个部分。