如果有一个整数值,例如86,那么我怎样从这个整数值中提取出r,g,b分量呢?我正在使用Visual C++ 2008 express版。谢谢。
通常情况下(我再次强调“通常”,因为您在问题中没有具体说明),颜色是使用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;
编辑2: 也许您的颜色是按调色板索引的,则您应该有一个存储调色板本身的数组,而文件中读取的字节应该是存储在其他地方的颜色索引。
通常你想要使用 RGB
宏从三个组件创建一个颜色。假设你拥有的值是相同格式的,你可以使用 GetRValue
、GetGValue
和 GetBValue
将其分解为各个部分。
我已经将文件内容读入一个字节数组中,
所以现在字节数组的值从0到255,
现在我需要在picturebox控件中显示这些数组值,
所以我使用了,
Bitmap^ bmp;
bmp->SetPixel(i,j,Color::FromArgb(buf[count]));
//buf是字节数组 但是这段代码没有显示任何东西,
所以我发现如果我提取RGB分量并将它们作为参数传递给Color::FromArbg(int red,int green,int blue),
那么它可能会起作用...
例如,如果我有值86,那么我怎样才能从中获取RGB分量呢..? - JAYMIN