Compartilhar via


Trabalhando com RGB de 16 bits

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Dois formatos são definidos para RGB descompactado de 16 bits:

  • MEDIASUBTYPE_555 usa cinco bits cada para os componentes vermelho, verde e azul em um pixel. O bit mais significativo no WORD é ignorado.
  • MEDIASUBTYPE_565 usa cinco bits para os componentes vermelho e azul e seis bits para o componente verde. Esse formato reflete o fato de que a visão humana é mais sensível às partes verdes do espectro visível.

RGB 565

Para extrair os componentes de cor de uma imagem RGB 565, trate cada pixel como um tipo WORD e use as seguintes máscaras de bits:

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

Obtenha os componentes de cor de um pixel da seguinte maneira:

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

Lembre-se de que os canais vermelho e azul são de 5 bits e o canal verde é de 6 bits. Para converter esses valores em componentes de 8 bits (para RGB de 24 bits ou 32 bits), você deve deslocar para a esquerda o número apropriado de bits:

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

Inverta esse processo para criar um RGB de 565 pixels. Supondo que os valores de cor tenham sido truncados para o número correto de bits:

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

RGB 555

Trabalhar com RGB 555 é essencialmente o mesmo que RGB 565, exceto que as máscaras de bits e as operações de bit shift são diferentes. Para obter os componentes de cor de um RGB de 555 pixels, faça o seguinte:

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;

Para empacotar os valores de cor vermelho, verde e azul em um RGB de 555 pixels, faça o seguinte:

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

Subtipos de vídeo RGB descompactados