函数功能: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。