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?

Recommended Answers

All 2 Replies

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?

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 codez...

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

I'll try that , thx very much

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.