16 ビット RGB の操作
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
16 ビット非圧縮 RGB には、次の 2 つの形式が定義されています。
- MEDIASUBTYPE_555は、ピクセル内の赤、緑、青の各コンポーネントにそれぞれ 5 ビットを使用します。 WORD の最上位ビットは無視されます。
- MEDIASUBTYPE_565では、赤と青のコンポーネントに 5 ビット、緑のコンポーネントに 6 ビットを使用します。 この形式は、人間の視覚が可視スペクトルの緑色の部分に最も敏感であるという事実を反映しています。
RGB 565
RGB 565 イメージから色コンポーネントを抽出するには、各ピクセルを WORD 型として扱い、次のビット マスクを使用します。
WORD red_mask = 0xF800;
WORD green_mask = 0x7E0;
WORD blue_mask = 0x1F;
ピクセルから次のように色成分を取得します。
BYTE red_value = (pixel & red_mask) >> 11;
BYTE green_value = (pixel & green_mask) >> 5;
BYTE blue_value = (pixel & blue_mask);
赤と青のチャネルは 5 ビットで、緑のチャネルは 6 ビットです。 これらの値を 8 ビット コンポーネント (24 ビットまたは 32 ビット RGB の場合) に変換するには、適切なビット数を左にシフトする必要があります。
// Expand to 8-bit values.
BYTE red = red_value << 3;
BYTE green = green_value << 2;
BYTE blue = blue_value << 3;
このプロセスを逆にして、RGB 565 ピクセルを作成します。 色の値が正しいビット数に切り捨てられていると仮定します。
WORD pixel565 = (red_value << 11) | (green_value << 5) | blue_value;
RGB 555
RGB 555 の操作は基本的に RGB 565 と同じですが、ビット マスクとビット シフト操作は異なります。 RGB 555 ピクセルからカラー コンポーネントを取得するには、次の操作を行います。
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;
赤、緑、青の色の値を RGB 555 ピクセルにパックするには、次の操作を行います。
WORD pixel565 = (red << 10) | (green << 5) | blue;
関連トピック