トップページ> 書庫> Visual C++/MFC 俺的メモ> Platform SDK 日本語訳> BITMAPINFOHEADER 構造体

BITMAPINFOHEADER 構造体
BITMAPINFOHEADER
BITMAPINFOHEADER 構造体は、DIBのサイズとカラーフォーマットに関する情報を保持します。

Windows 95, Windows NT 4.0: アプリケーションは、追加された機能のために BITMAPV4HEADER 構造体を使うこともできます。

Windows 98/Me, Windows 2000/XP: アプリケーションは、追加された機能のために BITMAPV5HEADER 構造体を使うこともできます。
だたし、CreateDIBitmap 関数でしか使用できません。
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, *PBITMAPINFOHEADER;
メンバ
biSize
構造体に必要なバイト数を指定します。(訳注:必ず sizeof(BITMAPINFOHEADER) を指定します)
biWidth
ビットマップの幅をピクセル単位で指定します。

Windows 98/Me, Windows 2000/XP: biCompression が BI_JPEG か BI_PNG の場合、biWidth メンバには展開後の JPEG または PNG イメージファイルの幅をそれぞれ指定します。
biHeight
ビットマップの高さをピクセル単位で指定します。 biHeight が正の値であった場合、ビットマップは "bottom-up DIB" で、それは左下隅から開始します。biHeight が負であった場合、ビットマップは "top-down DIB" で、それは左上隅から始まります。
biHeight が負であり、"top-down DIB" であることを示す場合、biCompression は BI_RGB か、BI_BITFIELDS のどちらかでなければなりません。
"top-down DIB" は圧縮できません。

Windows 98/Me, Windows 2000/XP: biCompression が BI_JPEG か BI_PNG の場合、biHeight メンバには展開後の JPEG または PNG イメージファイルの高さをそれぞれ指定します。
biPlanes
ターゲット デバイスの面の数を指定します。この値は 1 にするべきです。
biBitCount
1 ピクセルあたりのビット数 (bits-per-pixel) を指定します。
BITMAPINFOHEADER 構造体の biBitCount メンバは、それぞれのピクセルを定義するビットの数とビットマップ中の最大色数を指定します。
このメンバは以下のうちの一つである必要があります。

0 Windows 98/Me, Windows 2000/XP: ピクセルあたりのビット数は、JPEG または PNG フォーマットによって明示的または暗黙的に決定されます。
1 ビットマップはモノクロで、BITMAPINFO の bmiColors メンバは2つのエントリを保持します。
ビットマップ配列中のそれぞれのビットは、そのままピクセルに当てはまります。
もしビットがクリアなら(訳注:0なら)、ピクセルは bmiColors テーブルの最初のエントリの色で表示されます。
もしビットがセットされていたら(訳注:1なら)、ピクセルはテーブル中の2つめのエントリの色になります。
4 ビットマップは最大で16色までの色を持ち、BITMAPINFO の bmiColors メンバは16個までのエントリを保持します。
色テーブルへの4ビットのインデックスによってビットマップのそれぞれのピクセルが表現されます。
たとえば、ビットマップの最初のバイト値が 0x1F であった場合、このバイトは2つのピクセルを表します。
最初のピクセルはテーブルの2つ目のエントリの色になり(訳注:1 なので。0だと1つ目なので1だと2つ目。)、二つ目のピクセルはテーブルの16番目(訳注:F、すなわち15なので)のエントリの色になります。
8 ビットマップは最大256色までの色を持ち、BITMAPINFO の bmiColors メンバは256個までのエントリを保持します。
この場合、配列中のそれぞれのバイトが一つのピクセルに対応します。
16 ビットマップは最大2^16色までの色を持ちます。(訳注:2^16 = 65536, 16ビットカラー)
BITMAPINFOHEADER の biCompression メンバが BI_RGB であった場合、BITMAPINFO の bmiColors メンバは NULL です。
ビットマップ配列中のそれぞれの WORD が一つのピクセルを表します。
相対的な(?)赤、緑、青の輝度はそれぞれのカラー コンポーネントの5ビットによって表現されます。
青の値は最下位の5ビットで、それに続く5ビットがそれぞれ緑と赤になります。
最上位ビットは使用されません。
bmiColors の色テーブルはパレット・ベースのデバイスにおいて色を最適化するのに使用され、BITMAPINFOHEADER の biClrUsed で指定された数のエントリを保持する必要があります。
BITMAPINFOHEADER の biCompression メンバが BI_BITFIELDS だった場合、bmiColors メンバはそれぞれのピクセルごとの 赤、緑、青 コンポーネントを指定する3つの DWORD 色マスクを保持します(???)

Windows NT/Windows 2000/XP: biCompression メンバが BI_BITFIELDSだった場合、それぞれの DWORD マスクにセットされているビットは連続している必要があり、また他のマスクのビットと重なり合ってはいけません。 ピクセル中の全てのビットが使われる必要はありません。

Windows 95/98/Me: biCompression メンバが BI_BITFIELDS だった場合、システムは以下の 16bpp 色マスクのみをサポートします:
  • 5-5-5 16-bit イメージ(青のマスクは 0x001F で、緑のマスクは 0x03E0、そして赤のマスクは 0x7C00 です)
  • 5-6-5 16-bit イメージ(青のマスクは 0x001F で、緑のマスクは 0x07E0、そして赤のマスクは 0xF800 です)
24 ビットマップは最大2^24色までの色を持ちます。(訳注:2^24 = 16777216, 24ビットカラー)
BITMAPINFO の bmiColors メンバは NULL です。
ビットマップ配列中のそれぞれの3バイトの一組がピクセルの青、緑、赤の相対的な輝度に対応します。
bmiColors 色テーブルはパレット・ベースのデバイスにおいて色を最適化するのに使用され、BITMAPINFOHEADER の biClrUsed で指定された数のエントリを保持する必要があります。
(訳注:bmiColors はNULLなのか、色テーブルを入れればいいのか、両方書いてあるのでどっちだかわかりませんが、実際にはNULLでちゃんと動いてる気がするのでNULLでいいんでしょう。ていうか 16 ビットの解説文からコピペして消し忘れたんじゃないか?)
32 ビットマップは最大2^32色までの色を持ちます。(訳注:2^32 = 4294967296, 32ビットカラー)
BITMAPINFOHEADER の biCompression メンバが BI_RGB の場合、 BITMAPINFO の bmiColors メンバは NULL です。
ビットマップ配列中のそれぞれの DWORD がピクセルの青、緑、赤の相対的な輝度に対応します。
それぞれの DWORD のうちの上位のバイトは使用されません。
bmiColors 色テーブルはパレット・ベースのデバイスにおいて色を最適化するのに使用され、BITMAPINFOHEADER の biClrUsed で指定された数のエントリを保持する必要があります。
BITMAPINFOHEADER の biCompression メンバが BI_BITFIELDS の場合、bmiColors メンバはそれぞれのピクセルごとの 赤、緑、青 コンポーネントを指定する3つの DWORD 色マスクを保持します。ビットマップ配列中のそれぞれのそれぞれの DWORD が1つのピクセルに対応します。

Windows NT/ 2000: biCompression メンバが BI_BITFIELDSだった場合、それぞれの DWORD マスクにセットされているビットは連続している必要があり、また他のマスクのビットと重なり合ってはいけません。 ピクセル中の全てのビットが使われる必要はありません。

Windows NT/ 2000: When the biCompression member is BI_BITFIELDS, bits set in each DWORD mask must be contiguous and should not overlap the bits of another mask. All the bits in the pixel do not need to be used.

Windows 95/98/Me: biCompression メンバが BI_BITFIELDS だった場合、システムは以下の 32bpp 色マスクのみをサポートします: 青のマスクは 0x000000FF で、緑のマスクは 0x0000FF00、そして赤のマスクは 0x00FF0000。
biCompression
圧縮された "bottom-up" ビットマップの圧縮形式を指定します("top-down" DIB は圧縮できません)。
このメンバには以下のうちの一つが指定できます。

BI_RGB 非圧縮形式。
BI_RLE8 8bpp のビットマップ用のランレングス圧縮 (RLE) 形式。
圧縮フォーマットはカウント・バイトに色インデックスを含むバイトが続く構成2バイト形式です。(←訳怪しい)
詳細情報については、Bitmap Compression を参照してください。
BI_RLE4 4bpp のビットマップ用のランレングス圧縮 (RLE) 形式。
圧縮フォーマットはカウント・バイトに2つの WORD の長さの色インデックスが続く構成2バイト形式です。(←訳怪しい)
詳細情報については、Bitmap Compression を参照してください。
BI_BITFIELDS ビットマップは非圧縮で、色テーブルはそれぞれのピクセルに対応する赤、緑、青のコンポーネントを指定する3つの DWORD 色マスクから構成されることを指定します。(??)
16/32 bpp ビットマップでのみ使用可能です。
BI_JPEG Windows 98/Me, Windows 2000/XP: 画像は JPEG 画像であることを示します。
BI_PNG Windows 98/Me, Windows 2000/XP: 画像は PNG 画像であることを示します。
biSizeImage
画像サイズをバイト単位で指定します。BI_RGB ビットマップの場合は 0 を指定してもかまいません。

Windows 98/Me, Windows 2000/XP: biCompression が BI_JPEG か BI_PNG の場合、biSizeImage メンバは JPEG または PNG イメージバッファのサイズをそれぞれ示します。
biXPelsPerMeter
ビットマップのターゲット デバイスの水平方向の解像度を、pixels-per-meter で指定します。
アプリケーションはこの値をリソースグループから現在のデバイスに最適なビットマップを選択することに使用できます。
biYPelsPerMeter
ビットマップのターゲット デバイスの垂直方向の解像度を、pixels-per-meter で指定します。
biClrUsed
実際にビットマップによって使用される色テーブル中の色インデックスの数を指定します。この値が 0 の場合、biCompression で指定された圧縮モードの biBitCount メンバの値に付随する色の最大値を使用します。

ibClrUsed が 0 でなく、biBitCount が 16 より少ない場合、biClrUsed メンバはグラフィック エンジンまたはデバイスドライバがアクセスする実際の色数を指定します。
biBitCount が 16 かまたはそれより大きい場合、biClrUsed メンバはシステムカラーパレットのパフォーマンスを最適化するのに使用される色テーブルのサイズを指定します。
biBitCount が 16 か 32 の場合、3つの DWORD マスクに続いてすぐに最適なカラーパレットが始まります。(?)

ビットマップ配列が BITMAPINFO 構造体のすぐ後に続く場合、それは "packed bitmap" です。
"packed bitmap" は単一のポインタによって参照されます。
"packed bitmap" では、biClrUsed メンバは 0 か、色テーブルの正確なサイズでなければなりません。
biClrImportant
ビットマップを表示するのに必要な色インデックスの数を指定します。
値が0の場合、全ての色が必要になります。
注釈
BITMAPINFO 構造体 は DIB のサイズと色の完全な定義を規定するために BITMAPINFOHEADER 構造体と色テーブルを結合します。詳細情報については、Device-Independent Bitmaps と BITMAPINFO を参照してください。

アプリケーションは BITMAPINFO 構造体中の色テーブルを位置づけるために biSize メンバ にストアされている情報を使うべきです。
例を以下に示します。
pColor = ((LPSTR)pBitmapInfo + (WORD)(pBitmapInfo->bmiHeader.biSize));

Windows 98/Me, Windows 2000/XP: BITMAPINFOHEADER 構造体は StretchDIBits のソース画像として JPEG、PNG 画像を使えるように拡張されました。

この文書は、Microsoft Corporation が公開している情報を、私ヨシヲが翻訳し掲載したものです。
翻訳が正確である保障もありません。また、この記事に関して Microsoft Corporation に問い合わせることはおやめください。
この記事の掲載に問題があるようでしたら、ご連絡いただければ即削除します。

DBWebSystem ver-1.00
このページの内容は… (・∀・)[良い] / (-ω-;)[悪い]
ContentID : msdn_BITMAPINFOHEADER, Total Page Views : 21235, Page Score : -1
Last Update : 2004/11/04 22:22:23 (LIRS.txt)
System Designed & Coded by ヨシヲ
[このコンテンツを編集] [このコンテンツにリンクしているページ]