BITMAPINFO 構造体
更新 : 2007 年 11 月
BITMAPINFO 構造体は、Windows のデバイスに依存しないビットマップ (DIB: Device-Independent Bitmap) の寸法と色の情報を定義します。
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
パラメータ
bmiHeader
デバイスに依存しないビットマップの寸法とカラー フォーマットに関する情報を保持する BITMAPINFOHEADER 構造体を指定します。bmiColors
ビットマップの色を定義する RGBQUAD データ型または DWORD データ型の配列を指定します。
解説
デバイスに依存しないビットマップは、2 つの異なる部分から構成されています。ビットマップの寸法と色を表す BITMAPINFO 構造体と、ビットマップのピクセルを定義するバイトの配列です。配列内のビットはパックされますが、各スキャン ラインには LONG 境界上で終わるように 0 が埋め込まれている必要があります。高さが正の値のとき、ビットマップの原点は左下隅になります。高さが負の値のとき、原点は左上隅になります。
BITMAPINFOHEADER 構造体の biBitCount メンバは、各ピクセルを定義するビット数とビットマップの最大色数を決定します。このメンバには、次のいずれかの値を指定できます。
ビットマップはモノクロです。bmiColors メンバには 2 つのエントリがあります。ビットマップ配列の各ビットが 1 つのピクセルを表します。ビットがクリアされていると、ピクセルは bmiColors テーブルの最初のエントリの色で表示されます。ビットがセットされていると、ピクセルは 2 番目のエントリの色で表示されます。
ビットマップは最大 16 色です。bmiColors メンバには 16 までのエントリがあります。ビットマップの各ピクセルは、カラー テーブルへの 4 ビットのインデックスで表現されます。たとえば、ビットマップの最初のバイトが 0x1F のとき、このバイトは 2 ピクセルを表現します。最初のピクセルはテーブルの 2 番目のエントリの色を持ち、2 番目のピクセルは 16 番目のエントリの色を持ちます。
ビットマップは最大 256 色です。bmiColors メンバには 256 までのエントリがあります。この場合、配列内の各バイトが 1 つのピクセルを表します。
ビットマップは最大 216 色です。BITMAPINFOHEADER の biCompression メンバは BI_BITFIELDS にすることが必要です。bmiColors メンバには、各ピクセルの赤、緑、青のそれぞれの成分を示す 3 つの DWORD のカラー マスクがあります。DWORD マスクには連続したビットを設定し、ほかのマスクのビットと重ならないようにします。ピクセルのすべてのビットが使われるわけではありません。配列の各 WORD が 1 つのピクセルを表します。
ビットマップは最大 224 色です。bmiColors メンバは NULL です。ビットマップ配列の各 3 バイトの組が、それぞれピクセルの青、緑、赤の相対的な強度を表します。
ビットマップは最大 232 色です。BITMAPINFOHEADER の biCompression メンバは BI_BITFIELDS にすることが必要です。bmiColors メンバには、各ピクセルの赤、緑、青のそれぞれの成分を示す 3 つの DWORD のカラー マスクがあります。DWORD マスクには連続したビットを設定し、ほかのマスクのビットと重ならないようにします。ピクセルのすべてのビットが使われるわけではありません。配列の各 DWORD が 1 つのピクセルを表します。
BITMAPINFOHEADER 構造体の biClrUsed メンバは、ビットマップで実際に使われるカラー テーブルのカラー インデックスの数を指定します。biClrUsed メンバに 0 が設定されていると、ビットマップは biBitCount メンバの値に対応する最大色数を使います。
bmiColors テーブルの色は、重要度の高い順に配置します。また、DIB を使う関数では、bmiColors メンバに明示的な RGB 値を指定する代わりに、現在実現されている論理パレットへのインデックスを示す 16 ビット符号なし整数の配列を指定することもできます。この場合、ビットマップを使用するアプリケーションは、iUsage パラメータを DIB_PAL_COLORS に設定して、Windows の DIB 関数 (CreateDIBitmap、CreateDIBPatternBrush、および CreateDIBSection) を呼び出す必要があります。
ビットマップがパックされたビットマップ (つまり、BITMAPINFO ヘッダーの直後に続くビットマップ配列のビットマップで、1 つのポインタで参照されるビットマップ) である場合、biClrUsed メンバには偶数値を設定する必要があります。これは、DIB_PAL_COLORS モードが使われるとき、DIB ビットマップ配列が DWORD 境界から始まるように設定するためです。
メモ : |
---|
ビットマップをファイルに格納する場合、または他のアプリケーションに転送する場合は、bmiColors メンバにパレット インデックスを含めないでください。アプリケーションが独占的にビットマップを使用し、制御していない限り、ビットマップのカラー テーブルには明示的な RGB 値が含まれるようにします。 |
必要条件
ヘッダー : wingdi.h