将Color分解为其rgb值

时间:2012-08-30 07:39:16

标签: graphics

我正在xlib中编写一个项目并且有关于colors的问题。我使用无符号长类型变量来存储颜色值。如果有人知道如何获取每种颜色的红绿色和蓝色值?

2 个答案:

答案 0 :(得分:2)

        byte a = (byte)(value >> 24);
        byte r = (byte)(value >> 16);
        byte g = (byte)(value >> 8);
        byte b = (byte)value;

答案 1 :(得分:2)

你是说24位颜色(每种颜色成分8位)一起存储在一个32位整数中?如果是这种情况,您可以使用逻辑AND操作获取值,以将其他位归零。

假设您从

开始
/*
alpha? r g b
00000000 10101010 10101010 10101010 your 32 bit integer might look like this
& logical AND operator
00000000 00000000 00000000 11111111 a bit mask
=
00000000 00000000 00000000 10101010 the result
so now your 32 bit integer only has the blue values.
To do this in code...
*/
unsigned char B = (unsigned char) (your_integer & 0x000000ff) //000000ff is hex version of the bit mask
//but now what about the other two colors? you can't just apply a bit mask like 0000ff00 because 00000000000000001010101000000000 is much larger than 255.

//So you have to either divide the result by 256 to shift the bits right, or use >>8 to shift them to the right.

unsigned char G = (unsigned char) ((your_integer & 0x0000ff00) / 256)
unsigned char R = (unsigned char) ((your_integer & 0x00ff0000) / 256^2)
//or using the way I've used in the past... shifting before the mask.

unsigned char G = (unsigned char) ((your_integer >> 8) & 0x000000ff)
unsigned char R = (unsigned char) ((your_integer >> 16) & 0x000000ff)