-
介绍:
设备无关位图简称 DIB,这在 5.3.1 节中已经有所介绍。DIB一般是存放在磁盘上的以 bmp 为拓展名的位图文件,使用 DIB 的关键是如何将 DIB 中的数据转换为一个内存中的位图并返回一个位图句柄。 -
bmp 文件的结构定义:
- 文件的开始是一个 BITMAPFILEHEADER 结构
- BITMAPFILEHEADER 结构肚饿后面要么是 BITMAPCOREHEADE结构,要么是 BITMAPINFOHEADER 结构和索引表色,两种结构定义如下:
这两个数据结构主要包含了位图的一系列参数,在这些数据结构的后面,就是位图的像素数据了,整个bmp文件就有这3个部分组成。
- 文件的开始是一个 BITMAPFILEHEADER 结构
-
DIB 的读取与释放
- SetDIBitsToDevice 将位图数据复制到一个 hDC 中:
要使用 DIB,可以首先将整个文件读到内存中,然后从这些数据结构中得知位图的各种参数,最后使用 SetDIBitsToDevice 函数将位图数据复制到一个 hDC 中,如果整个 hDC 对应一个未初始化的位图,那么久相当于得到了包含磁盘 dmp 位图数据的位图句柄,并且可以在任何地方使用它。当然,在这以后可以将读入文件数据的内存释放掉。
1. hDC : 目的DC的句柄。
2. xDest 和 yDest : 指定了位图复制到 hDC 的左上角位置
3. dwWidth 和 dwHeigh : 指定了要复制的宽度和高度
4. xSrc 和 ySrc :指定了 DIB 中要复制的左上角位置
5. uStartScan 和 uScanLines: 指定了开始复制的扫描线和要复制的扫描线数。
6. ipvBits: 指向 DIB 中的像素数据部分
7. ipbmi :指向 DIB 中的 BITMAPINFO 或 BITMAPCOREINFO 结构
8. fuColorUse :指定了 DIB 中数据的类型,用 DIB_RGB_COLORS表示数据是 RGB类型的
- SetDIBitsToDevice 将位图数据复制到一个 hDC 中:
-
代码分析:
- 子程序_CreateDIBitmap 分析一个 DIB 文件的参数并返回包含整个DIB位图数据的位图句柄,读者可以在任何地方使用这个位图句柄。子程序的输入参数 _的输入参数 _hWnd 用来获取 hDC 的窗口句柄,_lpFileData 是将 DIB 文件整个读入内存后的文件指针。(注意其与窗口hDC区别,可以看代码分析最下面那一段话)
- 代码分析如下:
_CreateDIBitmap 子程序首先分析DIB文件的数据,确定BITMAPFILEHEADER 后面的数据结构是 BITMAPINFO 韩式 BITMAPCOREINFO,并从结构中获取位图的高度和宽度,然后建立一个未初始化的位图,并从 SetDIBitsToDevice 函数将位图数据拷贝到这个位图中(通过 该位图的hDC),最后将位图句柄返回以供后面的使用。
win3.2 7.3 创建和使用位图-使用设备无关位图
最新推荐文章于 2019-12-27 14:32:32 发布