neo7101
neo7101

Reputation: 45

decomposing Color to its rgb values

I'm writing a project in xlib and have a problem concerning the colors.I use unsigned long type variables for storing the color values.does anybody know how can i take the red green and blue values of each color?

Upvotes: 2

Views: 1313

Answers (2)

Libathos
Libathos

Reputation: 3362

Are you saying that the 24 bits of color (8 for each color component) are stored together in one 32 bit integer? If that's the case you can obtain the values using the logical AND operation to zero the other bits.

Let's say you start with

/*
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)

Upvotes: 2

Victor
Victor

Reputation: 693

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

Upvotes: 2

Related Questions