Jump to content
  • Advertisement


This topic is now archived and is closed to further replies.


splitting a pixel into an RGB triplet

This topic is 6377 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

i can''t figure out how to acurately split up a 16-bit color pixel into an RGB triplet. it seems like there is a loss in color info when i create the pixel from an RGB triplet that prevents me from retrieving it acurately. i''m using directx, so i''ve got the RBitMask, GBitMask, and BBitMask, and i thought i could just go & each mask with the pixel and then shift it. But i only get top five bits of acuracy, and the last three are all 0. any help?
_________________Gecko___ Gecko Design

Share this post

Link to post
Share on other sites
yeah i knew that already, that''s my problem. as stated above, i want to know how (if there IS a way) to more acurately split the pixel into the RGB triplet. any ideas?

Gecko Design

Share this post

Link to post
Share on other sites
Guest Anonymous Poster
Obviously, if you take a 24 bit RGB color, cram it into 15 (or 16) bits, you will lose some accuracy.

However, there is one thing you can do to get closer to the initial color back out.

In this example, I will convert a RGB888 into a RGB444 (since the hex math is much more clear with 4 bits per pixel than 5).

Start with 0xFFFFFF (pure white)
Convert to 0xFFF (pure white) with 4 bits per gun with a right shift.

Now, if you just "reverse" the operation, and use a left shift you end up with 0xF0F0F0, which is somewhat dimmer than the initial color. The trick is to "repeat" the color component bits in the low bits after the left shift. Then you get 0xFFFFFF back from 0xFFF (however, in general, you _can''t_ get the exact same value back all of the time). This makes sense if you consier one gun at a time:

8 bit -> 4 bit
00 0
11 1
22 2
33 3
ee e
ff f

This maintains the "full range" of each color space.

In the case of 6 bits to 8 bits, you just repeat the 2 highest bits in the 2 lowest bits after the left shift by 2.

E.g. : 10010 (binary 6 bit component) becomes 1001010 (8-bit)
and 01001 becomes 0100101

Hope this makes sense (its late).

Share this post

Link to post
Share on other sites

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!