CbitmapCImageHbitmap概要1
前言
CImage类是基于GDI+的,但是这里为什么要讲归于GDI?
主要是基于这样的考虑: 在GDI+环境中,我们可以直接使用GDI+ ,没多少必要再使用CImage类
但是,如果再GDI环境中,我们要想使用GDI+,有点麻烦,还得加入头文件,加入启动GDI+的代码和关闭GDI+的代码,显得太罗嗦了,GDI 的CBitmap 处理功能又有局限,只能处理BMP格式的图片。 怎么办?这时,我们便可使用CImage类,因为这个类本身封装了GDI+得使用环境,所以无需我们手动设置,简化了我们的操作。 同时,又可以利用GDI+中强大的图片处理功能,及可以简便的与CBitmap对象进行转换 ,大大方便了在GDI环境下,进行各种图片处理工作 。
其实,将其称作 GDI/ GDI+ 混合编程,这样才更确切些。
为什么引入CImage类?
CBitmap 类只能处理BMP格式的图片,非常受限。
而CImage可以处理JPGE GIF BMP PNG多种格式图片,扩展了图片处理功能 且能与CBitmap 进行转换( 因为所载入的位图句柄都是HBITMAP,所以可相互转换),因此引入CImage类进行图像处理
CImage provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats
CImage类介绍
CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换。
CImage是VC.NET中定义的一种MFC/ATL共享类,也是ATL的一种工具类,它提供增强型的(DDB和DIB)位图支持,可以装入、显示、转换和保存多种格式的图像文件,包括BMP、GIF、JPG、PNG、TIF等。CImage是一个独立的类,没有基类。(CImage类是基于GDI+的,从VC.NET起引进,VC 6.0中没有。)
ATL(Active Template Library,活动模板库)是一套基于模板的 C++ 类,用以简化小而快的 COM 对象的编写。
为了在MFC程序中使用CImage类,必须包含ATL的图像头文件atlimage.h:(在VS08 SP1中不用包含)
#include atlimage.h
1 加载位图文件
[cpp]view plaincopyprint?
// CImage可加载的图片文件有JPG,BMP,TIF.PNG等格式 而CBitmap只能加载BMP图片文件
if(!PathFileExists(imgFilePath))
return NULL;
CImage nImage;
nImage.Load(imgFilePath);
return nImage.Detach(); //返回HBITMAP 可用CBitmap 处理 也可用CImage处理
// CImage可加载的图片文件有JPG,BMP,TIF.PNG等格式 而CBitmap只能加载BMP图片文件
if(!PathFileExists(imgFilePath))
return NULL;
CImage nImage;
nImage.Load(imgFilePath);
return nImage.Detach(); //返回HBITMAP 可用CBitmap 处理 也可用CImage处理
2 与CBitmap转换
[cpp]view plaincopyprint?
CImage nImage;
nImage.Load(imgFilePath);
HBITMAP hBitmap=nImage.Detach(); // 获得位图句柄 用以转换
// 转换方式一:
CBitmap bmp;
bmp.DeleteObject();
bmp.Attach(hBitmap); // 转换为CBitmap对象
// 转换方
原创力文档

文档评论(0)