CreateDIBSection 与 CreateDIBitmap 的区别——详细探讨
很多人说,IDB和DDB之间的相互转换比较慢,所以我们使用CreateDIBSection()来创建一个DIB区块。这样作图速度快。
CreateDIBSection()返回的是一个HBITMAP,CreateDIBitmap()返回的也是HBITMAP。
两者的区别是,CreateDIBSection创建的是一个DIBSECTION结构,而CreateDIBitmap创建的是BITMAP结构。
----------------------------------------------------
DIB区块(DIBSECTION)是什么?看看它的结构:
typedef struct tagDIBSECTION {
BITMAP dsBm;
BITMAPINFOHEADER dsBmih;
DWORD dsBitfields[3];
HANDLE dshSection;
DWORD dsOffset;
} DIBSECTION, *PDIBSECTION;
可以看到,它包含了一个 位图结构BITMAP,一个DIB信息头BITMAPINFOHEADER,一个掩码表dsBitfields[3].
还有一个内存映射文件句柄和偏移量。我们不去理睬最后两个字段。
因此,使用GDI函数对CreateDIBSection()返回的HBITMAP作图是没有什么问题的。
-------------------------------------------------------------------------
我不明白的是,既然我们可以使用CreateDIBitmap()来从DIB得到DDB,干嘛微软还要多此一举弄一个CreateDIBSection()(除开内存映射文件功能)?
这连个函数的作图效率有差别么?如果有,是什么原因。在我看来,DIB和DDB的区别无非就是信息头不同。一个是BITMAPINFOHEADER,一个是BITMAP,还有,一个带有颜色表,而另一个没有颜色表。而DIB和DDB的位图数据是完全一样的。
求牛人指教。