Partager via


Utilisation de RVB 16 bits

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Deux formats sont définis pour RVB non compressé 16 bits :

  • MEDIASUBTYPE_555 utilise cinq bits chacun pour les composants rouge, vert et bleu d’un pixel. Le bit le plus significatif dans WORD est ignoré.
  • MEDIASUBTYPE_565 utilise cinq bits pour les composants rouge et bleu, et six bits pour le composant vert. Ce format reflète le fait que la vision humaine est la plus sensible aux parties vertes du spectre visible.

RVB 565

Pour extraire les composants de couleur d’une image RVB 565, traitez chaque pixel comme un type WORD et utilisez les masques de bits suivants :

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

Obtenez les composants de couleur à partir d’un pixel comme suit :

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

N’oubliez pas que les canaux rouge et bleu sont de 5 bits et que le canal vert est de 6 bits. Pour convertir ces valeurs en composants 8 bits (pour RVB 24 bits ou 32 bits), vous devez décaler vers la gauche le nombre de bits approprié :

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

Inversez ce processus pour créer un RVB de 565 pixels. En supposant que les valeurs de couleur ont été tronquées au nombre correct de bits :

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

RVB 555

L’utilisation de RVB 555 est essentiellement la même que RVB 565, sauf que les opérations de décalage de bits et de décalage de bits sont différentes. Pour obtenir les composants de couleur à partir d’un RVB de 555 pixels, procédez comme suit :

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;

Pour emballer les valeurs de couleur rouge, verte et bleue dans un RVB de 555 pixels, procédez comme suit :

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

Sous-types vidéo RVB non compressés