merlinzjl

导航

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将被忽略
pbmi:指向BITMAPINFO结构的指针,该结构指定了与设备无关位图的各种属性,其中包括位图的维数和颜色。
iUsage:指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组包含的数据类型(要么是逻辑调色板索引值,要么是原文的RGB值)。下列值是系统定义的,其含义为:
DIB_PAL_COLORS:表示成员bmiColors是hdc指定的设备环境的逻辑调色板,使用的是16位索引值数组。
DIB_RGB_COLORS:表示结构BITMAPINFO中包含了RGB值的数组。
ppvBits:指向一个变量的指针,该变量接收一个指向DIB位数据值的指针。
hSectiondwOffset值通常设置为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中的颜色数据对该位图进行更改。(目的地址)
uStartScan:为参数lpvBits指向的数组中的、与设备无关的颜色数据指定起始扫描线
cScanLines:为包含与设备无关的颜色数据的数组指定扫描线数目。
lpvBits:指向DIB颜色数据的指针,这些数据存储在字节类型的数组中,位图值的格式取决于参数lpbmi指向的BITMAPINFO结构中的成员biBitCount。(指定的DIB位图
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指定的数组中。

posted on 2020-01-06 00:35  merlinzjl  阅读(510)  评论(0编辑  收藏  举报