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;
| 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 色マスクのみをサポートします:
|
| 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。 |
| 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 画像であることを示します。 |
pColor = ((LPSTR)pBitmapInfo + (WORD)(pBitmapInfo->bmiHeader.biSize));
翻訳が正確である保障もありません。また、この記事に関して Microsoft Corporation に問い合わせることはおやめください。
この記事の掲載に問題があるようでしたら、ご連絡いただければ即削除します。