Lavorare con RGB a 16 bit
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stato sostituito da MediaPlayer, IMFMediaEnginee dall'acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di utilizzare codice nuovo con MediaPlayer, IMFMediaEngine e Acquisizione Audio/Video in Media Foundation anziché con DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Per RGB non compresso a 16 bit sono definiti due formati:
- MEDIASUBTYPE_555 usa cinque bit ciascuno per i componenti rosso, verde e blu in un pixel. Il bit più significativo nel WORD viene ignorato.
- MEDIASUBTYPE_565 usa cinque bit per i componenti rosso 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 di 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 rosso 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 555
L'uso di RGB 555 è essenzialmente identico a RGB 565, ad eccezione delle maschere di bit e delle operazioni di spostamento dei bit. 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 comprimere i valori di colore rosso, verde e blu in un pixel RGB 555, eseguire le operazioni seguenti:
WORD pixel565 = (red << 10) | (green << 5) | blue;
Argomenti correlati