CreateDIBSection功能创建一个与设备无关的位图(DIB),应用程序可以直接写入。该函数提供了一个指向位图位值位置的指针。您可以为函数用于创建位图的文件映射对象提供句柄,也可以让操作系统为位图分配内存。
HBITMAP创建DIBSection(
HDC 【HDC】, | //处理设备上下文 |
CONST BITMAPINFO *【PBMI】, | //指向包含位图大小,格式和颜色数据的结构的指针 |
UINT 【iUsage】, | //颜色数据类型指示符:RGB值或调色板索引 |
VOID *【ppvBitsru-Latn】, | //指向变量的指针,以接收位图的位值的指针 |
HANDLE 【dsOffset value】, | //文件映射对象的可选句柄 |
DWORD 【dwOffset】 | //偏移到文件映射对象中的位图位值 |
); |
参数
【HDC】
处理设备上下文。如果【iUsage】的值为DIB_PAL_COLORS,则该函数使用该设备上下文的逻辑调色板初始化与设备无关的位图的颜色。
【PBMI】
指向BITMAPINFO结构,指定与设备无关的位图的各种属性,包括位图的尺寸和颜色。
【iUsage】
指定由【PBMI】指向的BITMAPINFO结构BITMAPINFO阵列成员中包含的数据类型:逻辑调色板索引或文字RGB值。定义了以下值:
值 | 含义 |
DIB_PAL_COLORS | bmiColors成员是由【HDC】指定的设备上下文的逻辑调色板中的16位索引数组。 |
DIB_RGB_COLORS | BITMAPINFO结构包含文字RGB值的数组。 |
【ppvBitsru-Latn】
指向一个变量,该变量接收到与设备无关的位图的位值的位置的指针。
【dsOffset value】
处理文件映射对象,该函数将用于创建与设备无关的位图。此参数可以为NULL。
如果【dsOffset value】不为NULL,则它必须是通过调用CreateFileMapping函数创建的文件映射对象的句柄。通过其他方法创建的句柄将导致CreateDIBSection失败。
如果【dsOffset value】不为NULL,则CreateDIBSection函数在【dsOffset value】引用的文件映射对象中将位图的位值定位在偏移量【dwOffset】处。一个应用程序随后可以通过CreateDIBSection返回的HBITMAP调用GetObject函数来检索【dsOffset value】句柄。
如果【dsOffset value】为NULL,则操作系统将为与设备无关的位图分配内存。在这种情况下,CreateDIBSection函数忽略【dwOffset】参数。一个应用程序以后不能获得这个内存的句柄:通过调用GetObject函数填写的DIBSECTION结构的dsOffset成员将为NULL。
【dwOffset】
指定从【dsOffset value】引用的文件映射对象开头的偏移量,其中位图的位值的存储开始。如果【dsOffset value】为NULL,则忽略此值。位图的位值在双字边界上对齐,因此【dwOffset】必须是DWORD大小的倍数。
返回值
如果函数成功,则返回值是新创建的与设备无关的位图的句柄,* 【ppvBitsru-Latn】指向位图的位值。
如果函数失败,则返回值为NULL,并且* 【ppvBitsru-Latn】为NULL。要获取扩展错误信息,请调用GetLastError.
备注
如上所述,如果【dsOffset value】为NULL,则操作系统将为与设备无关的位图分配内存。当您稍后通过调用DeleteObject功能删除与设备无关的位图时,操作系统将关闭该内存的句柄。如果【dsOffset value】不为NULL,则必须在调用DeleteObject之后自己关闭【dsOffset value】内存句柄来删除位图。
Windows NT:您需要保证GDI子系统完成任何绘图到CreateDIBSection创建的位图,然后自己绘制位图。访问位图必须同步。通过调用GdiFlush函数来执行此操作。这适用于指向位图的位值的指针的任何使用,包括将指针传递给诸如SetDIBits之类的函数。
也可以看看
BITMAPINFO, CreateFileMapping, DeleteObject, DIBSECTION, GetDIBColorTable, GetObject, GdiFlush, HBITMAP, SetDIBits, SetDIBColorTable