### 函数功能

GetDIBits函数检取指定位图的信息，并将其以指定格式复制到一个缓冲区中。

### 函数原型

int GetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbi, UINT uUsage)；

### 参数

hdc：设备环境句柄。
hbmp：位图句柄。
uStartScan：指定检索的第一个扫描线。
cScanLines：指定检索的扫描线数。
lpvBits：指向用来检索位图数据的缓冲区的指针。如果此参数为NULL，那么函数将把位图的维数与格式传递给lpbi参数指向的BITMAPINFO结构。
lpbi：指向一个BITMAPINFO结构的指外，此结构确定了设备无在位图的数据格式。
uUsage：指定BITMAPINFO结构的bmiColors成员的格式。它必须为下列取值：
DIB_PAL_COLORS：颜色表由指向当前逻辑调色板的16位索引值数组构成。
DIB_RGB_COLORS：颜色表由红、绿、蓝（RGB）三个直接值构成。

### 返回值

如果lpvBits参数非空，并且函数调用成功，那么返回值为从位图复制的扫描线数。
Windows 95和Windows 98：如果lpvBits参数为NULL并且GetDIBits成功地填充了BITMAPINFO结构，那么返回值为位图中总共的扫描线数。
Windows NT：如果lpvBits参数为NULL并且GetDIBits成功地填充了BITMAPINFO结构，那么返回值为非0。如果函数执行失败，那么将返回0值。Windows NT：若想获得更多错误信息，请调用callGetLastError函数。
注释：如果所需要的DIB格式与其内部格式相匹配，那么位图的RGB值将被复制。如果不匹配，那么将合成一个颜色表。下表描述了针对每一种颜色格式所合成的颜色表。
1_BPP：颜色表中仅包含黑白表项。
4_BPP：颜色表由标准VGA定义的颜色组合而成。
8_BPP：颜色表由GDI定义的256色组合而成。
24_BPP：不返回颜色表。
如果lpvBits参数为一个有效指针，那么位图信息头结构的前6个成员必须初始化为DIB的大小和格式。
注意：位图信息头结构可为以下几种格式：
操作系统位图信息头结构(Operating System Bitmap Information Header)
Windows NT 3.51及早期的BITMAPINFOHEADER
Windows NT 4.0及Windows 95中的BITMAPV4HEADER
Windows NT 5.0及Windows 98中的BITMAPV5HEADER
通过将高度设为正数来指定一个自下而上的DIB，而自上而下的DIB则通过设置一个负的高度值来指定。位图的颜色表将附加在BITMAPINFO结构的后面。
如果lpvBits为NULL，那么GetDIBits将检查lpbi所指向的第一个结构的第一个成员。这一成员必须指定BITMAPCOREHEADER结构或位图信息头结构的字节数。函数将通过指定的大小来确定剩余成员如何被初始化。
如果lpvBits为NULL，并且BITMAPINFO结构的bit count成员初始化为0，那么GetDIBits将不填充BITMAPCOREHEADER结构或位图信息头结构的颜色表部分。这一技术可用来查询位图属性。
应用程序调用这个函数时必须将hbmp参数所标识的位图选择到一个设备环境中。
自下而上DIB的原点为位图的左下角，自上而下DIB的原点为其左上角。

### 速查

Windows NT：3.1及以上版本；Windows：95及以上版本；Windows CE：不支持；头文件：wingdi.h；库文件：gdi32.lib。