用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 }
View Code
原文地址:https://www.cnblogs.com/lpxblog/p/4742492.html