ビットマップ ヘッダーの種類

ビットマップには、次の 4 種類の基本的なヘッダーがあります。

4 種類のビットマップ ヘッダーは、各構造体の最初の DWORD である Size メンバーによって区別されます。

BITMAPV5HEADER 構造体は拡張 BITMAPV4HEADER 構造体であり、これは拡張 BITMAPINFOHEADER 構造体です。 ただし、 BITMAPINFOHEADERBITMAPCOREHEADER には、他のビットマップ ヘッダー構造と共通の Size メンバーしかありません。

BITMAPCOREHEADER 形式と BITMAPV4HEADER 形式はそれぞれ BITMAPINFOHEADER 形式と BITMAPV5HEADER 形式に置き換えられます。 BITMAPCOREHEADER 形式と BITMAPV4HEADER 形式は、完全性と下位互換性のために表示されます。

DIB の形式は次のとおりです (詳細については、「 ビットマップ ストレージ 」を参照してください)。

カラー テーブルは、ピクセル値が RGB カラー値にどのように対応するかを示しています。 RGB は、光を放射することによって生成される色を記述するためのモデルです。

プロファイル データ は、プロファイル ファイル名 (リンクされたプロファイル) または実際のプロファイル ビット (埋め込みプロファイル) を参照します。 ファイル形式では、プロファイル データがファイルの末尾に配置されます。 プロファイル データは、カラー テーブルの直後に配置されます (存在する場合)。 ただし、関数がパックされた DIB を受け取る場合、プロファイル データは、ファイル形式のようにビットマップ ビットの後に格納されます。

プロファイル データは、bV5CSType がPROFILE_LINKEDまたはPROFILE_EMBEDDEDされる BITMAPV5HEADER 構造体にのみ存在します。 パックされた DIB を受け取る関数の場合、プロファイル データはビットマップ データの後に格納されます。

淡色化されたデバイスは、パレットを使用して色を割り当てる任意のデバイスです。 古いデバイスの典型的な例は、8 ビットの色深度 (つまり、256 色) で実行されるディスプレイです。 このモードの表示では、小さなカラー テーブルを使用してビットマップに色を割り当てます。 ビットマップ内の色は、デバイスが使用しているパレット内の最も近い色に割り当てられます。 淡色化されたデバイスは、ビットマップを表示するための最適なパレットを作成しません。現在のパレットにあるものは何でも使用します。 アプリケーションは、パレットを作成し、システムに選択する必要があります。 一般に、16 ビット、24 ビット、32 ビット/ピクセル (bpp) のビットマップには、カラー テーブル (ビットマップに最適なパレット) は含まれません。この場合、アプリケーションは最適なパレットを生成する必要があります。 ただし、16、24、および 32-bpp ビットマップには、淡色化されたデバイスに表示するための最適なカラー テーブルを含めることができます。この場合、アプリケーションは、ビットマップ ファイルに存在するカラー テーブルに基づいてパレットを作成するだけで済みます。

1、4、または 8 bpp のビットマップには、bpp に基づく最大サイズのカラー テーブルが必要です。 1、4、8 の bpp ビットマップの最大サイズは、bpp の累乗に対して 2 です。 したがって、1 つの bpp ビットマップは最大 2 色、4 bpp ビットマップは最大 16 色、8 bpp ビットマップは最大 256 色です。

16、24、または 32-bpp のビットマップでは、カラー テーブルは必要ありませんが、淡色化されたデバイスの色を指定できる場合があります。 カラー テーブルが 16、24、または 32-bpp ビットマップに存在する場合、 biClrUsed メンバーは カラー テーブルのサイズを指定し、カラー テーブルにはその多くの色が含まれている必要があります。 biClrUsed が 0 の場合、カラー テーブルはありません。

BI_BITFIELDビットマップの赤、緑、青のビットフィールド マスクは、 BITMAPINFOHEADERBITMAPV4HEADERBITMAPV5HEADER 構造体の直後にあります。 BITMAPV4HEADER および BITMAPV5HEADER 構造体には、次のように赤、緑、青のマスク用の追加メンバーが含まれています。

メンバー 説明
RedMask 各ピクセルの赤いコンポーネントを指定するカラー マスク。 Compression メンバーが BI_BITFIELDS に設定されている場合にのみ有効です。
GreenMask 各ピクセルの緑色のコンポーネントを指定するカラー マスク。 Compression メンバーが BI_BITFIELDS に設定されている場合にのみ有効です。
BlueMask 各ピクセルの青成分を指定するカラー マスク。 Compression メンバーがBI_BITFIELDSに設定されている場合にのみ有効です。

 

BITMAPINFOHEADERbiCompression メンバーが BI_BITFIELDS に設定され、関数が LPBITMAPINFO 型の引数を受け取ると、カラー マスクはヘッダーの直後に続きます。 カラー テーブルが存在する場合は、カラー マスクに従います。 BITMAPCOREHEADER ビットマップでは、カラー マスクはサポートされていません。

既定では、ビットマップ データは、その形式でボトムアップされます。 ボトムアップとは、ビットマップ データの最初のスキャン行が表示される最後のスキャン行であることを意味します。 例えば、10ピクセルのビットマップデータの0番目のスキャンラインの0番目のピクセルは、10ピクセルのビットマップによって、表示または印刷された画像の9番目のスキャンラインの0番目のピクセルとなる。 実行長エンコード (RLE) 形式のビットマップと BITMAPCOREHEADER ビットマップをトップダウン ビットマップにすることはできません。 スキャン行は、RLE 圧縮ビットマップを除き、 DWORD で整列されます。 RLE 圧縮ビットマップを除き、4 つで均等に割り切れないスキャン行幅をバイト単位で埋め込む必要があります。 たとえば、10 x 10 ピクセルの 24-bpp ビットマップでは、各スキャン行の末尾に 2 つのパディング バイトが含まれます。