Condividi tramite


Uso di RGB a 16 bit

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Due formati sono definiti per RGB non compresso a 16 bit:

  • MEDIASUBTYPE_555 usa cinque bit per i componenti rossi, verdi e blu in un pixel. Il bit più significativo in WORD viene ignorato.
  • MEDIASUBTYPE_565 usa cinque bit per i componenti rossi e blu e sei bit per il componente verde. Questo formato riflette il fatto che la visione umana è più sensibile alle parti verdi dello spettro visibile.

RGB 565

Per estrarre i componenti di colore da un'immagine RGB 565, considerare ogni pixel come tipo WORD e usare le maschere di bit seguenti:

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

Ottenere i componenti di colore da un pixel come indicato di seguito:

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

Tenere presente che i canali rossi e blu sono 5 bit e il canale verde è a 6 bit. Per convertire questi valori in componenti a 8 bit (per RGB a 24 bit o a 32 bit), è necessario spostare a sinistra il numero appropriato di bit:

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

Invertire questo processo per creare un pixel RGB 565. Supponendo che i valori di colore siano stati troncati al numero corretto di bit:

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

RGB 5555

L'uso di RGB 555 è essenzialmente uguale a RGB 565, ad eccezione delle maschere di bit e delle operazioni di spostamento bit sono diverse. Per ottenere i componenti di colore da un pixel RGB 555, eseguire le operazioni seguenti:

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;

Per raggruppare i valori di colore rosso, verde e blu in un pixel RGB 555, eseguire le operazioni seguenti:

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

Sottotipi video RGB non compressi