zoukankan      html  css  js  c++  java
  • 用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
  • 相关阅读:
    大白带你侃JAVA——封装的概述及好处
    什么是面向对象?(通俗易懂)
    方法和数组就是这么简单!
    Java开发环境不再需要配置classpath!
    Logback中使用TurboFilter实现日志级别等内容的动态修改
    Logback中如何自定义灵活的日志过滤规则
    Swagger中配置了@ApiModelProperty的allowableValues属性但不显示的问题
    Spring Boot中如何扩展XML请求和响应的支持
    Spring Cloud Finchley版中Consul多实例注册的问题处理
    为Spring Cloud Config插上管理的翅膀
  • 原文地址:https://www.cnblogs.com/lpxblog/p/4742492.html
Copyright © 2011-2022 走看看