次の方法で共有


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

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

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

BITMAPV5HEADER 構造体は拡張 BITMAPV4HEADER 構造体であり、拡張 BITMAPINFOHEADER 構造体です。 ただし、BITMAPINFOHEADER および BITMAPCOREHEADER には、他のビットマップ ヘッダー構造体と共通の 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 ビットマップの最大サイズは 2 の bpp 乗です。 したがって、1 bpp ビットマップには最大 2 色、4 bpp ビットマップには最大 16 色、8 bpp ビットマップには最大 256 色が含まれます。

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

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

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

 

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

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