CreateDIBitmap与CreateDIBSection的区别(转)
https://www.cnblogs.com/staring-hxs/archive/2013/08/17/3264896.html
最主要区别:
CreateDIBitmap创建的是设备相关位图句柄
CreateDIBSection创建的是设备无关位图句柄
CreateDIBSection创建的是一个DIBSECTION结构,
CreateDIBitmap创建的是BITMAP结构。
1函数原型:
HBITMAP CreateDIBSection(HDC hdc,CONST BITMAPINFO *pbmi,UINT iUsage,VOID** ppvBits,HANDLE hSection,DWORD dwOffset);
当hSection为NULL时,系统会使用pbmi指定的位图信息来分配一块内存空间,该内存由操作系统管理,返回类型为HBitMAP的DIBSection对象。当以后通过调用DeleteObject函数删除该DIB时,系统将关闭指向相应内存的句柄。如果Hsection不为NULL,那么在调用DeleteObject删除该位图之后,必须自己关闭hSection内存句柄。
参数意义:
hdc:设备环境句柄。如果iUsage的值是DIB_PAL_COLORS,那么函数使用该hdc的逻辑调色板对与设备无关位图的颜色进行初始化。(仅在fColorUse参数设定为DIB_
PAL_COLORS时,才使用hdc参数,如果fColorUse为DIB_RGB_COLORS(或0),hdc将被忽略)
PAL_COLORS时,才使用hdc参数,如果fColorUse为DIB_RGB_COLORS(或0),hdc将被忽略)
pbmi:指向BITMAPINFO结构的指针,该结构指定了与设备无关位图的各种属性,其中包括位图的维数和颜色。
DIB_PAL_COLORS:表示成员bmiColors是hdc指定的设备环境的逻辑调色板,使用的是16位索引值数组。
DIB_RGB_COLORS:表示结构BITMAPINFO中包含了RGB值的数组。
ppvBits:指向一个变量的指针,该变量接收一个指向DIB位数据值的指针。
hSection和dwOffset值通常设置为NULL
2函数原型
int SetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, CONST VOID *lpvBits,CONST BITMAPINFO *lpbmi, UINT fuColorUse);
该函数使用指定的DIB位图中发现的颜色数据来设置位图中的像素。
函数将lpvBits中指定的位图图像数据拷贝到hbmp对应系统给分配好的内存中。如果函数成功,那么返回值就是复制的扫描线数;如果函数失败,那么返回值是0。
参数:
hdc:指向设备环境中的句柄。
hbmp:指向位图的句柄。函数要使用指定DIB中的颜色数据对该位图进行更改。(目的地址)
cScanLines:为包含与设备无关的颜色数据的数组指定扫描线数目。
lpbmi:指向BITMAPINFO数据结构的指针,该结构包含有关DIB的信息。(指定的DIB位图)
fuColorUse:指定是否提供了BITMAPINFO结构中的bmiColors成员,如果提供了,那么bmiColors是否包含了明确的RGB值或调色板索引。参数fuColorUse必须取下列值,各值的含义为:
DIB_PAL_COLORS:颜色表由16bit的索引值数组组成。这些值可以对由hdc参数标识的设备环境中的逻辑调色板进行索引。
DIB_RGB_COLORS:提供了颜色表,并且表中包含了原义的RGB值。
3函数原型
int GetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbi, UINT uUsage);
和SetDIBits相反,将数据从位图(hbmp)中取出来放到lpvBits指定的数组中。