最简单的位图保存方法之基于CImage类实现

Change

发布日期: 2018-12-20 12:36:01 浏览量: 1077
评分:
star star star star star star star star_border star_border star_border
*转载请注明来自write-bug.com

背景

我们在使用VS实现图像绘图的时候,往往也会用到保存位图的功能。也就是,怎么根据位图的句柄,然后怎么把位图保存成本地的图片格式文件。如果,你在看这篇文章之前,你自己了解过些资料,那么你可能会说,那就根据BMP位图格式,设置文件头信息、设置位图头信息、设置调色版、最后写入位图数据。或许,看到这里,很多初学者都会晕吧。如果不了解位图文件格式,那是不是就没有简单的保存方式了?

答案是有!有一种最简单的方法,不需要你了解任何图片格式,就根据位图句柄保存成任意的图片格式,保存为.PNG、.JPG、.GIF、.BMP格式图片都没有问题。因为,我们使用的是 CImage 类实现的,这个类中已经封装好现成的函数供我们调用了!

那么,我就把程序的实现原理和过程写成文档,分享给大家。

实现原理

先来介绍下 CImage 类,CImage类是ATL和MFC共用的一个类,其头文件为atlimage.h,主要用于图片文件的打开,显示与保存。这里需要注意的是,VC6.0版本不支持 CImage!

使用 CImage 实现位图保存的原理是:

  • 首先,CImage::Attach函数,实现将位图句柄hBitmap附加到CImage对象上

  • 然后,调用CImage::Save函数,实现将位图存储为图片文件,图片类型根据传入的保存文件名确定。支持.PNG、.JPG、.GIF、.BMP等 4 种格式图片的生成

就这样,简单的两步操作,就可以将位图保存为图片文件了。

编程实现

头文件

  1. #include <atlimage.h>

根据位图句柄保存为图片文件

  1. BOOL SaveBmp(HBITMAP hBmp)
  2. {
  3. CImage image;
  4. // 附加位图句柄
  5. image.Attach(hBmp);
  6. // 保存成图片
  7. // bmp格式
  8. image.Save("mybmp1.bmp");
  9. // png格式
  10. image.Save("mybmp1.png");
  11. // jpg格式
  12. image.Save("mybmp1.jpg");
  13. // gif格式
  14. image.Save("mybmp1.gif");
  15. return TRUE;
  16. }

程序测试

直接运行程序,成功生成.PNG、.JPG、.GIF、.BMP 4 种格式图片文件:

总结

这个程序原理很简单,但是要注意的是,这种方法不适用于VC6.0开发环境,因为VC6.0上不支持 CImage 类的使用。

参考

参考自《Windows黑客编程技术详解》一书

上传的附件 cloud_download BmpSave_CImage_Test.7z ( 969.64kb, 3次下载 )

发送私信

如果哪天我们真的久别重逢,我希望你别来无恙

12
文章数
14
评论数
最近文章
eject