从整数值中提取rgb颜色分量

时间:2010-02-26 14:06:44

标签: visual-c++ graphics colors

如果存在整数值,例如。 86那么我如何从这个整数值中提取r,g,b分量....? 我正在研究Visual C ++ 2008 express版。 感谢..

2 个答案:

答案 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宏从三个组件创建颜色。假设您拥有的价值采用相同的格式,您可以使用GetRValueGetGValueGetBValue将其拆分为单个部分。