• 1.摘要
  • 2.基本信息
  • 3.基本内容

createdibsection

基本信息

  • 名称

    createdibsection

  • 函数功能

    该函数创建应用程序可以直接写入的与设备无关的位图(DIB)

基本内容

函数功能:该函数创建应用程序可以直接写入的、与设备无关的位图(DIB)。该函数提供一个指针,该指针指向位图位数据值的地方。可以给文件映射对象提供句柄,函数使用文件映射对象来创建位图,或者让系统为位图分配内存。

函数原型:HBITMAP CreateDIBSection(HDChdc,CONSTBITMAPINFO *pbmi,UINT iUsage,VOID** ppvBits,HANDLE hSection,DWORDdwOffset);

参数:

hdc:设备环境句柄。如果iUsage的值是DIB_PAL_COLORS,那么函数使用该设备环境的逻辑调色板对与设备无关位图的颜色进行初始化。

pbmi:指向BITMAPINFO结构的指针,该结构指定了与设备无关位图的各种属性,其中包括位图的维数和颜色。

iUsage:指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组包含的数据类型(要么是逻辑调色板索引值,要么是原文的RGB值)。下列值是系统定义的,其含义为:

DIB_PAL_COLORS:表示成员bmiColors是hdc指定的设备环境的逻辑调色板,使用的是16位索引值数组。

DIB_RGB_COLORS:表示结构BITMAPINFO中包含了RGB值的数组。

ppvBits:指向一个变量的指针,该变量接收一个指向DIB位数据值的指针。

hSection:文件映射对象的句柄。函数将使用该对象来创建DIB(与设备无关位图)。该参数可以是NULL。

如果hSection不是NULL,那么它一定是文件映射对象的句柄。该对象是通过调用带有PAGE_READWRITE或PAGE_WRITECOPY标志的CreateFileMapping函数创建的。不支持只读的DIB类型。通过其他方法创建的句柄将会引起CreateDIBSection函数执行失败。

如果hSection不是NULL,那么函数CreateDIBSection将在hSection引用的文件映射对象中偏移量为dwOffset处获取位图的位数据值。应用程序可以在以后通过调用GetObject函数来检索hSection句柄,其中GetObject函数使用了GreateDIBSection函数返回的GBITMAP类型的对象。

如果hSection为NULL,那么系统将为与设备无关位图(DIB)分配内存。在这种情况下,函数CreateDIBSection将忽略参数dwOffset,应用程序无法在以后获取指向内存的句柄。通过调用GetObject函数来填充的DIBSECTION结构成员dshSection也将成为NULL。

DwOffset:指定从hSection引用的文件映射对象开始处算起的偏移量,超过这个偏移量的地方就是位图的位数据值开始存放的地方。在hSection为NULL时忽略该值。位图的位数据值是以DWORD为单位计算的。

返回值:如果函数执行成功,那么返回值是一个指向刚刚创建的与设备无关位图的句柄,并且*ppvBits指向该位图的位数据值;如果函数执行失败,那么返回值为NULL,并且*ppvBit也为NULL,若想获得更多错误信息,请调用GetLastError函数。

备注:正如上面提到过,如果hSection为NULL,那么系统为DIB分配内存。当以后通过调用DeleteObject函数删除该DIB时,系统将关闭指向相应内存的句柄。如果Hsection不为NULL,那么在调用DeleteObject删除该位图之后,必须自己关闭hSection内存句柄。

WindowsNT:需要保证GDI子系统在自己绘制位图之前已经完成所有由创建的位图。访问位图应该是同时的。这可以调用函数来进行。其适用于任何指向位图的位数据值指针的情况,也包括在调用象这样的函数时传送指针的情形。

:如果(由参数指向)结构成员不包含或,那么不进行颜色管理。否则,允许有颜色管理,并且有与该位图有关的特定的颜色空间。