Freigeben über


Arbeiten mit 16-Bit-RGB

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Für unkomprimiertes 16-Bit-RGB werden zwei Formate definiert:

  • MEDIASUBTYPE_555 verwendet jeweils fünf Bits für die roten, grünen und blauen Komponenten in einem Pixel. Das wichtigste Bit in WORD wird ignoriert.
  • MEDIASUBTYPE_565 verwendet fünf Bits für die roten und blauen Komponenten und sechs Bits für die grüne Komponente. Dieses Format spiegelt die Tatsache wider, dass das menschliche Sehen am empfindlichsten für die grünen Teile des sichtbaren Spektrums ist.

RGB 565

Um die Farbkomponenten aus einem RGB 565-Bild zu extrahieren, behandeln Sie jedes Pixel als WORD-Typ , und verwenden Sie die folgenden Bitmasken:

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

Rufen Sie die Farbkomponenten wie folgt aus einem Pixel ab:

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

Denken Sie daran, dass die roten und blauen Kanäle 5 Bit und der grüne Kanal 6 Bits sind. Um diese Werte in 8-Bit-Komponenten (für 24-Bit- oder 32-Bit-RGB) zu konvertieren, müssen Sie die entsprechende Anzahl von Bits links verschieben:

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

Umkehren Sie diesen Vorgang, um eine RGB-565-Pixel-Version zu erstellen. Angenommen, die Farbwerte wurden auf die richtige Anzahl von Bits abgeschnitten:

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

RGB 555

Die Arbeit mit RGB 555 ist im Wesentlichen identisch mit RGB 565, mit der Ausnahme, dass sich die Bitmasken und Bitverschiebungsvorgänge unterscheiden. Gehen Sie wie folgt vor, um die Farbkomponenten aus einem RGB 555 Pixel abzurufen:

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;

Gehen Sie wie folgt vor, um die roten, grünen und blauen Farbwerte in rgb 555 Pixel zu packen:

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

Unkomprimierte RGB-Videountertypen