用CImage类来显示PNG、JPG等图片
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>
这是一个强大的图像处理类,下面分别详细介绍在文档、对话框下的显示图片。
对于单文档程序:
步骤一:添加头文件(由于我使用的是VS2008SP1,所以我未添加上面的头文件。)
步骤二:在Doc头文件里面声明对象,如:CImage img ;
步骤三:在Doc实现函数里面的序列化Serialize函数
void CImagePNGDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: 在此添加存储代码
}
else
{
// TODO: 在此添加加载代码
if(!img.IsNull()) img.Destroy();
img.Load(ar.GetFile()->GetFilePath());
}
}
步骤四:在视图View的实现文件OnDraw()里面
void CImagePNGView::OnDraw(CDC* pDC )
{
CImagePNGDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
if(!pDoc->img.IsNull()) pDoc->img.Draw(pDC->m_hDC, 0, 0);
}
完成,以上可以显示大多数的图片格式。
对于对话框程序:
步骤一:在对话框的头文件声明一个对象,如:CImage img ;
步骤二:dlg上添加一个Picture Control,Type设置为Rectangle
步骤三:在对话框的实现函数OnPaint()函数里面(使用类向导重载OnPaint)
1 void CDrawPictureDlg::OnPaint() 2 { 3 CPaintDC dc(this); // device context for painting 4 CDialog::OnPaint(); 5 CDialog::UpdateWindow();// 更新windows窗口,如果无这步调用,图片显示还会出现问题 6 7 CImage img; 8 if(!img.IsNull()) img.Destroy(); 9 img.Load(_T("E:\\visual studio 2010\\Projects\\LoadDllDemo\\img\\skin\\111.jpg")); 10 if(!img.IsNull()) 11 { 12 CRect rect; 13 CDC *pDC = GetDlgItem(IDC_STATIC_PIC)->GetDC(); 14 HDC hDC= pDC->GetSafeHdc(); 15 GetDlgItem(IDC_STATIC_PIC)->GetClientRect(&rect); 16 img.Draw(dc.m_hDC, 0, 0);//直接在对话框上绘制图片 17 //img.Draw(hDC, 0, 0);//在PictureControl上绘制图片 18 ReleaseDC(pDC); 19 } 20 }