BITMAPINFOHEADER 構造体
BITMAPINFOHEADER 構造体には、DIB (デバイスに依存しないビットマップ) のディメンジョンおよびカラー フォーマットに関する情報を格納する。
注 この構造体の詳細については、Microsoft® Platform SDK を参照すること。このエントリは、クイック リファレンスとして DirectShow ドキュメントに含まれている。
構文
typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
メンバ
biSize
構造体が必要とするバイト数を指定する。構造体がカラー テーブルやカラー マスクの後に続く場合、そのカラー テーブルやカラー マスクのサイズはこの値には含まれない。注意を参照すること。
biWidth
ビットマップの幅を指定する。
- RGB フォーマットの場合、幅はピクセル単位で指定する。
- ビット深度が2 の累乗であれば、YUV フォーマットの場合についても同様である。
- ただし、ビット深度が2 の累乗ではないYUV フォーマットの場合、幅はバイト単位で指定する。
デコーダおよびビデオ ソースは biWidth がイメージの幅となるようなフォーマットを提示する必要がある。ビデオ レンダラが DirectDraw を使っている場合、biWidth がサーフェイスのストライドと等しくなり、VIDEOINFOHEADER 構造体または VIDEOINFOHEADER2 構造体の rcTarget メンバがイメージの幅を示すようにフォーマットを変更する。次に変更したフォーマットを IPin::QueryAccept を使って提示する。
RGB フォーマットおよび 2 の累乗の YUV フォーマットで、ビデオ レンダラがストライドを指定しない場合、幅を一番近い DWORD 境界に丸めてストライドを求める。
biHeight
ビットマップの高さを指定する (ピクセル単位)。
- 非圧縮 RGB ビットマップで biHeight の値が正の場合、ビットマップは左下隅に原点を持つボトムアップ DIB である。biHeight の値が負の場合、ビットマップは左上隅に原点を持つトップダウン DIB である。
- YUV ビットマップでは、ビットマップは biHeight の符号にかかわりなく常にトップダウンである。デコーダは YUV フォーマットに正の値の biHeight を指定しなければならないが、下位互換性を保つために正負いずれの値の biHeight でも YUV フォーマットを受け入れる必要がある。
- 圧縮フォーマットでは biHeight はイメージの方向とはかかわりなく必ず正の値でなければならない。
biPlanes
ターゲット デバイスに対する面の数を指定する。これは必ず 1 に設定する。
biBitCount
1 ピクセルあたりのビット数を指定する。
biCompression
ビットマップが圧縮されている場合、このメンバは圧縮を指定する FOURCC である。非圧縮フォーマットの場合、指定可能な値は次のとおりである。
値 | 説明 |
BI_RGB | 非圧縮 RGB。 |
BI_BITFIELDS | カラー マスクが指定された非圧縮 RGB。16 bpp および 32 bpp のビットマップに対して有効である。 |
詳細については、「注意」を参照すること。
biSizeImage
イメージのサイズを指定する (バイト単位)。非圧縮 RGB ビットマップの場合は、0 に設定できる。
biXPelsPerMeter
ビットマップのターゲット デバイスの水平解像度を 1 メートルあたりのピクセル単位で指定する。
biYPelsPerMeter
ビットマップのターゲット デバイスの垂直解像度を 1 メートルあたりのピクセル単位で指定する。
biClrUsed
カラー テーブル内のカラー インデックスのうち、ビットマップ内で実際に使うインデックスの数を指定する。
biClrImportant
ビットマップを表示するために重要と見なされるカラー インデックス数を指定する。この値がゼロの場合は、すべての色が重要と見なされる。
注意
ビットマップが 8 bpp 以下の場合、BITMAPINFOHEADER の直後にあるビットマップはカラー テーブルを使う。カラー テーブルは、RGBQUAD 値の配列で構成されている。配列のサイズは biClrUsed メンバで指定する。biClrUsed が 0 の場合、配列には所定のビット深度に対応する色の最大数、つまり 2 の biBitCount 累乗 (2^biBitCount) 色を格納する。
biCompression が BI_BITFIELDS と等しい場合、ビットマップは 3 つの DWORD カラー マスク (それぞれ赤、緑、青) を使ってピクセルのバイト レイアウトを指定する。各マスクの 1 ビットがピクセル内のその色に対応するビットを示している。
16 bpp ビットマップで biCompression が BI_RGB と等しい場合、フォーマットは RGB 555 である。biCompression が BI_BITFIELDS と等しい場合、フォーマットは RGB 555 または RGB 565 である。AM_MEDIA_TYPE 構造体のサブタイプ GUID を使って特定の RGB タイプを調べる。
圧縮タイプまたは YUV タイプでは、FOURCC 値はリトル エンディアン順の DWORD 型で指定する。たとえば、YUYV の場合は 'VYUY'、つまり 0x56595559 となる。詳細については、「FOURCC コード」を参照すること。
BITMAPINFOHEADER がカラー テーブルまたは一連のカラー マスクの後に続く場合は、BITMAPINFO 構造体を使ってカラー マスクのカラー テーブルを参照できる。BITMAPINFO 構造体は次のように定義される。
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
BITMAPINFOHEADER を BITMAPINFO にキャストすると、bmiHeader メンバは BITMAPINFOHEADER を参照し、bmiColors メンバはカラー テーブルの最初のエントリ、または最初のカラー マスクを参照する。
ビットマップがカラー テーブルまたはカラー マスクを使うときは、フォーマット構造体全体のサイズ (BITMAPINFOHEADER に色情報を加えたサイズ) は sizeof(BITMAPINFOHEADER) とも sizeof(BITMAPINFO) とも等しくならない点に注意すること。各インスタンスの実際のサイズを計算すること。
参照