GetDIBits函数检索指定位图的位,并使用指定的格式将它们复制到缓冲区中。
int GetDIBits
HDC 【HDC】, | //设备上下文的句柄 |
HBITMAP 【骨形态发生蛋白】, | //处理位图 |
UINT 【uStartScan】, | //第一条扫描行设置在目标位图中 |
UINT 【cScanLines】, | //要复制的扫描行数 |
LPVOID 【lpvBits】, | //位图位数组的地址 |
LPBITMAPINFO 【LPBI】, | //具有位图数据的结构地址 |
UINT 【uUsage】 | // RGB或调色板索引 |
); |
参数
【HDC】
标识设备上下文。
【骨形态发生蛋白】
标识位图。
【uStartScan】
指定要检索的第一条扫描线。
【cScanLines】
指定要检索的扫描线数。
【lpvBits】
指向缓冲区以接收位图数据。如果此参数为NULL,则该函数将位图的维度和格式传递给【LPBI】参数指向的BITMAPINFO结构。
【LPBI】
指向BITMAPINFO结构,指定与设备无关的位图(DIB)数据的所需格式。
【uUsage】
指定bmiColors结构bmiColors成员的格式。它必须是以下值之一:
值 | 含义 |
DIB_PAL_COLORS | 颜色表应由当前逻辑调色板中的16位索引阵列组成。 |
DIB_RGB_COLORS | 颜色表应包含文字红,绿,蓝(RGB)值。 |
返回值
如果【lpvBits】参数为非NULL且函数成功,则返回值是从位图复制的扫描行数。
Windows 95:
如果【lpvBits】参数为NULL且GetDIBits成功填充BITMAPINFO结构,则返回值是位图中扫描行的总数。
Windows NT:
如果【lpvBits】参数为NULL并且GetDIBits成功填充BITMAPINFO结构,则返回值不为零。
如果函数失败,返回值为零。
备注
如果DIB的请求格式与其内部格式匹配,则会复制位图的RGB值。如果所请求的格式与内部格式不符,则合成颜色表。下表描述了为每种格式合成的颜色表。
值 | 含义 |
1_BPP | 颜色表由黑色和白色条目组成。 |
4_BPP | 色表由与标准VGA调色板相同的颜色混合组成。 |
8_BPP | 颜色表由GDI定义的256种颜色的一般混合。(包含在这256种颜色中,是默认逻辑调色板中的20种颜色。) |
24_BPP | 没有颜色表返回。 |
如果【lpvBits】参数是有效的指针,则必须初始化BITMAPINFOHEADER结构的前六个成员以指定DIB的大小和格式。请注意,通过将高度设置为正数来指定自底向上的DIB,而通过将高度设置为负数来指定自顶向下的DIB。位图的颜色表将附加到BITMAPINFO结构。
如果【lpvBits】为NULL,则GetDIBits将检查【LPBI。】指向的第一个结构的第一个成员。该成员必须指定BITMAPCOREHEADER或BITMAPINFOHEADER结构的大小(以字节为单位)。该函数使用指定的大小来确定剩余成员应如何初始化。
如果【lpvBits】为NULL,并且BITMAPINFO的位计数成员初始化为零,则GetDIBits将填充BITMAPINFOHEADER或BITMAPCOREHEADER而不显示颜色表。该技术可用于查询位图属性。
当应用程序调用此函数时,不得将【骨形态发生蛋白】参数标识的位图选择到设备上下文中。
自下而上的DIB的起源是位图的左下角;自顶向下的DIB的原点是左上角。
也可以看看