描述
GetDIBits函数检索指定的兼容位图的位,并使用指定的格式将它们复制到DIB中。
C++ 语法
int GetDIBits( __in HDC hdc, __in HBITMAP hbmp, __in UINT uStartScan, __in UINT cScanLines, __out LPVOID lpvBits, __inout LPBITMAPINFO lpbi, __in UINT uUsage ); |
PowerBASIC 语法
FUNCTION GetDIBits( _ BYVAL hdc AS DWORD, _ BYVAL hbmp AS DWORD, _ BYVAL uStartScan AS DWORD, _ BYVAL cScanLines AS DWORD, _ BYREF lpvBits AS ANY, _ BYREF lpbi AS BITMAPINFO, _ BYVAL uUsage AS DWORD _ ) AS LONG |
参数
hdc
[in]处理设备上下文。
hbmp
[in]处理位图。这必须是一个兼容的位图(DDB)。
uStartScan
[in]指定要检索的第一条扫描线。
cScanLines
[in]指定要检索的扫描行数。
lpvBits
[out]指向缓冲区的指针,用于接收位图数据。如果此参数为NULL,则该函数将位图的维度和格式传递给LPBI参数指向的BITMAPINFO结构。
lpbi
[in/out]指向BITMAPINFO结构的指针,指定DIB数据的所需格式。
uUsage
[in]指定BITMAPINFO结构的bmiColors成员的格式。它必须是以下值之一。
值 |
含义 |
DIB_PAL_COLORS |
颜色表应由当前逻辑调色板中的16位索引数组组成。 |
DIB_RGB_COLORS |
颜色表应包含文字红,绿,蓝(RGB)值。 |
返回值
如果lpvBits参数为非空,并且该函数成功,则返回值是从位图复制的扫描行数。
Windows 95/98 / Me:如果lpvBits参数为NULL且GetDIBits成功填充BITMAPINFO结构,则返回值是位图中扫描行的总数。
Windows NT / 2000 / XP / Vista / Windows 7:如果lpvBits参数为NULL且GetDIBits成功填充BITMAPINFO结构,则返回值不为零。
如果函数失败,返回值为零。
Windows NT / 2000 / XP / Vista / Windows 7:要获取扩展错误信息,请调用GetLastError.这可以是以下值。
值 |
含义 |
ERROR_INVALID_PARAMETER |
一个或多个输入参数无效。 |
备注
如果DIB的请求格式与其内部格式匹配,则会复制位图的RGB值。如果所请求的格式与内部格式不符,则合成颜色表。下表描述了为每种格式合成的颜色表。
值 |
含义 |
1_BPP |
颜色表由黑色和白色条目组成。 |
4_BPP |
色表由与标准VGA调色板相同的颜色混合组成。 |
8_BPP |
颜色表由GDI定义的256种颜色的一般混合。(包含在这256种颜色中,是默认逻辑调色板中的20种颜色。) |
24_BPP |
没有颜色表返回。 |
如果lpvBits参数是有效的指针,则必须初始化BITMAPINFOHEADER结构的前六个成员以指定DIB的大小和格式。除了RLE压缩位图之外,扫描线必须在DWORD上对齐。
通过将高度设置为正数来指定自底向上的DIB,而通过将高度设置为负数来指定自顶向下的DIB。位图颜色表将附加到BITMAPINFO结构。
如果lpvBits为NULL,则GetDIBits将检查lpbi指向的第一个结构的第一个成员。该成员必须指定BITMAPCOREHEADER或BITMAPINFOHEADER结构的大小(以字节为单位)。该函数使用指定的大小来确定剩余成员应如何初始化。
如果lpvBits为NULL,并且BITMAPINFO的位计数成员初始化为零,GetDIBits将填充BITMAPINFOHEADER结构或BITMAPCOREHEADER而不使用颜色表。该技术可用于查询位图属性。
当应用程序调用此函数时,不得将骨形态发生蛋白参数标识的位图选择到设备上下文中。
自下而上的DIB的起源是位图的左下角;自顶向下的DIB的原点是左上角。
引用文件 #INCLUDE Once
WinGdi.inc(包括Windows.inc)