win3.2 7.3 创建和使用位图-使用设备无关位图

  1. 介绍:
    设备无关位图简称 DIB,这在 5.3.1 节中已经有所介绍。DIB一般是存放在磁盘上的以 bmp 为拓展名的位图文件,使用 DIB 的关键是如何将 DIB 中的数据转换为一个内存中的位图并返回一个位图句柄。

  2. bmp 文件的结构定义:

    1. 文件的开始是一个 BITMAPFILEHEADER 结构
      在这里插入图片描述
    2. BITMAPFILEHEADER 结构肚饿后面要么是 BITMAPCOREHEADE结构,要么是 BITMAPINFOHEADER 结构和索引表色,两种结构定义如下:
      在这里插入图片描述
      在这里插入图片描述
      这两个数据结构主要包含了位图的一系列参数,在这些数据结构的后面,就是位图的像素数据了,整个bmp文件就有这3个部分组成。
  3. DIB 的读取与释放

    1. 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类型的
  4. 代码分析:

    1. 子程序_CreateDIBitmap 分析一个 DIB 文件的参数并返回包含整个DIB位图数据的位图句柄,读者可以在任何地方使用这个位图句柄。子程序的输入参数 _的输入参数 _hWnd 用来获取 hDC 的窗口句柄,_lpFileData 是将 DIB 文件整个读入内存后的文件指针。(注意其与窗口hDC区别,可以看代码分析最下面那一段话)
    2. 代码分析如下:
      在这里插入图片描述
      _CreateDIBitmap 子程序首先分析DIB文件的数据,确定BITMAPFILEHEADER 后面的数据结构是 BITMAPINFO 韩式 BITMAPCOREINFO,并从结构中获取位图的高度和宽度,然后建立一个未初始化的位图,并从 SetDIBitsToDevice 函数将位图数据拷贝到这个位图中(通过 该位图的hDC),最后将位图句柄返回以供后面的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值