GetDIBits
指定されたビットマップのビットを取得し、指定された形式でバッファへコピーします。
int GetDIBits( HDC hdc, // デバイスコンテキストのハンドル HBITMAP hbmp, // ビットマップのハンドル UINT uStartScan, // 取得対象の最初の走査行 UINT cScanLines, // 取得対象の走査行の数 LPVOID lpvBits, // ビットマップのビットからなる配列 LPBITMAPINFO lpbi, // ビットマップデータのバッファ UINT uUsage // RGB とパレットインデックスのどちらか );
パラメータ
- hdc
- デバイスコンテキストのハンドルを指定します。
- hbmp
- ビットマップのハンドルを指定します。
- uStartScan
- 取得対象の最初の走査行を指定します。
- cScanLines
- 取得対象の走査行の数を指定します。
- lpvBits
- バッファへのポインタを指定します。関数から制御が返ると、このバッファにビットマップデータが格納されます。NULL を指定すると、ビットマップのサイズと形式が、lpbi パラメータが指す 構造体に格納されます。
- lpbi
- DIB データの希望のデータ形式を保持している、1 個の BITMAPINFO 構造体へのポインタを指定します。関数から制御が返ると、元のデータ形式が格納されたままです。
- uUsage
- BITMAPINFO 構造体の bmiColors メンバの形式を指定します。次の値のいずれかを指定します。
値 意味 DIB_PAL_COLORS カラーテーブルは、現在の論理パレットに関連する 16 ビットのインデックス番号からなる配列です。 DIB_RGB_COLORS カラーテーブルは、RGB 値そのものです。
戻り値
lpvBits パラメータが NULL 以外のときに関数が成功すると、コピーされた走査行の数が返ります。
Windows 95/98:lpvBits パラメータが NULL のときに関数が BITMAPINFO 構造体への書き込みに成功すると、ビットマップの走査行の数が返ります。
Windows NT/2000:lpvBits パラメータが NULL のときに関数が BITMAPINFO 構造体への書き込みに成功すると、0 以外の値が返ります。
関数が失敗すると 0 が返ります。
Windows NT/2000:拡張エラー情報を取得するには、 関数を使います。
解説
要求した DIB の形式が内部形式と一致した場合、ビットマップの RGB 値がコピーされます。一致しなかった場合、カラーテーブルが合成されます。次の表は、各形式で合成されるカラーテーブルを示します。
| 値 | 意味 |
| 1_BPP | カラーテーブルは、黒と白のエントリで構成されています。 |
| 4_BPP | カラーテーブルは、標準 VGA パレットと同じ混合色で構成されています。 |
| 8_BPP | カラーテーブルは、GDI で定義された汎用の 256 色で構成されています。(これらの 256 色には、既定の論理パレットで定義されている 20 色も含まれています。) |
| 24_BPP | カラーテーブルは、返されません。 |
lpvBits パラメータに有効なポインタを指定する場合は、BITMAPINFOHEADER 構造体の最初の 6 つのメンバに DIB のサイズやデータ形式を設定しておかなければなりません。RLE 圧縮ビットマップを除き、走査行は DWORD 境界に整列しておかなければなりません。
高さに正の値を指定するとボトムアップのビットマップデータ(一般的なビットマップデータ)が、負の値を指定するとトップダウンのビットマップデータが格納されます。ビットマップのカラーテーブルは、BITMAPINFO 構造体へ追加されます。
lpvBits が NULL の場合、GetDIBits は lpbi が指す最初の構造体の最初のメンバを調べます。このメンバは、 または BITMAPINFOHEADER 構造体のサイズをバイト単位で指定していなければなりません。この関数は指定されたサイズを使って、残りのメンバを初期化する方法を決定します。
lpvBits が NULL で、 構造体のビットカウントメンバ(biBitCount)が 0 に初期化されている場合、GetDIBits はカラーテーブルを含めずに、BITMAPINFOHEADER または BITMAPCOREHEADER への書き込みを行います。この手法を使って、ビットマップ属性の問い合わせを行えます。
hbmp パラメータが示すビットマップがデバイスコンテキストで選択されている場合、この関数を呼び出さないでください。
ボトムアップ DIB の原点は、ビットマップの左下隅です。トップダウン DIB の原点は、左上隅です。
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Wingdi.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Gdi32.lib を使用