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;

BITMAPINFOHEADERBITMAPINFO にキャストすると、bmiHeader メンバは BITMAPINFOHEADER を参照し、bmiColors メンバはカラー テーブルの最初のエントリ、または最初のカラー マスクを参照する。

ビットマップがカラー テーブルまたはカラー マスクを使うときは、フォーマット構造体全体のサイズ (BITMAPINFOHEADER に色情報を加えたサイズ) は sizeof(BITMAPINFOHEADER) とも sizeof(BITMAPINFO) とも等しくならない点に注意すること。各インスタンスの実際のサイズを計算すること。

参照