现在的位置: 首页 > 综合 > 正文

/LGC图形渲染/Working with 16-bit RGB

2014年02月19日 ⁄ 综合 ⁄ 共 1698字 ⁄ 字号 评论关闭

 

Page view tracker

Working with 16-bit RGB

 
Microsoft DirectShow 9.0


Working with 16-bit RGB

Two formats are defined for 16-bit uncompressed RGB:

  • MEDIASUBTYPE_555 uses five bits each for the red, green, and blue components in a pixel. The most significant bit in the WORD
    is ignored.
  • MEDIASUBTYPE_565
    uses five bits for the red and blue components, and six bits for the
    green component. This format reflects the fact that human vision is most
    sensitive to the green portions of the visible spectrum.

RGB 565

To extract the color components from an RGB 565 image, treat each pixel as a WORD
type and use the following bit masks:

WORD red_mask = 0xF800;
WORD green_mask = 0x7E0;
WORD blue_mask = 0x1F;

Get the color components from a pixel as follows:

BYTE red_value = (pixel & red_mask) >> 11;
BYTE green_value = (pixel & green_mask) >> 5;
BYTE blue_value = (pixel & blue_mask);

Remember that the red and blue channels are 5 bits and the
green channel is 6 bits. To convert these values to 8-bit components
(for 24-bit or 32-bit RGB), you must left-shift the appropriate number
of bits:

// Expand to 8-bit values.
BYTE red = red_value << 3;
BYTE green = green_value << 2;
BYTE blue = blue_value << 3;

Reverse this process to create an RGB 565 pixel.  Assuming the color values have been truncated to the correct number of bits:

WORD pixel565 = (red_value << 11) | (green_value << 5) | blue_value;

RGB 555

Working with RGB 555 is
essentially the same as RGB 565, except the bit masks and bit shift
operations are different. To get the color components from an RGB 555
pixel, do the following:

WORD red_mask = 0x7C00;
WORD green_mask = 0x3E0;
WORD blue_mask = 0x1F;

BYTE red_value = (pixel & red_mask) >> 10;
BYTE green_value = (pixel & green_mask) >> 5;
BYTE blue_value = (pixel & blue_mask);

// Expand to 8-bit values:
BYTE red = red_value << 3;
BYTE green = green_value << 3;
BYTE blue = blue_value << 3;

To pack the red, green, and blue color values into an RGB 555 pixel, do the following:

WORD pixel565 = (red << 10) | (green << 5) | blue;

See Also

 

抱歉!评论已关闭.