zoukankan      html  css  js  c++  java
  • MFC 关于MFC中CImage的简单使用

    首先要将#include <atlimage.h>加进来,开始时我加到stdafx.h中,但一直提示windows.h被重复引入的问题,后将其加在别的头文件中,就可以了..   --!

    一、图片的载入

    如果需要在界面上显示的是已经存在的图片,那么需要将待显示的图片载入至CImage对象之中,CImage提供了四个载入函数:

    HRESULT Load(LPCTSTR pszFileName) throw( );

    HRESULT Load(IStream* pStream) throw();

    void LoadFromResource(HINSTANCE hInstance, LPCTSTR pszResourceName) throw( );

    void LoadFromResource(HINSTANCE hInstance, UINT nIDResource) throw( );

    如果需要显示的图片在程序运行时需要更换则通常使用第一个函数Load(LPCTSTR pszFileName)载入图片,参数pszFileName指定要载入的图片文件;如果需要显示的图片是固定不变的,则通常使用第三个LoadFromResource(HINSTANCE hInstance, LPCTSTR pszResourceName)或第四个函数LoadFromResource(HINSTANCE hInstance, UINT nIDResource)载入图片,这两个函数是从资源中取得图片信息,每一个参数是包含有待载入图片的模块实例句柄,第二个参数是资源的ID或名称。

    LPCTSTR类型可以理解为 const char*

    但是我在使用时需要加上 (LPCTSTR)"XX.jpg"

    以下代码分别通过Load和LoadFromResource载入了图片:

    CImage m_image1;        // 实际代码中,被声明成了类成员

    CImage m_image2;        // 实际代码中,被声明成了类成员

    m_image1.Load("G:\xxx.jpg");

    m_image2.LoadFromResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));

    在实际中,第一种方法会出现无法载入图片的情况,目前我还不太清楚原因,希望知道的网友指教

    二、图片的显示

    将图片载入CImage对象的目的是将其在界面之中显示出来,显示图像用到的核心函数是Draw,Draw提供了6个重载函数,通过参数名称,很容易了解参数的含义,其原型如下:

    BOOL Draw(HDC hDestDC,int xDest,int yDest,int nDestWidth,int nDestHeight,

             int xSrc,int ySrc,  int nSrcWidth,int nSrcHeight ) const throw( );

    BOOL Draw(HDC hDestDC,const RECT& rectDest,const RECT& rectSrc) const throw( );

    BOOL Draw(HDC hDestDC,int xDest,int yDest ) const throw( );

    BOOL Draw(HDC hDestDC,const POINT& pointDest) const throw( );

    BOOL Draw(HDC hDestDC,int xDest,int yDest,int nDestWidth,int nDestHeight) const throw( );

    BOOL Draw(HDC hDestDC,const RECT& rectDest) const throw( );

    如果要以控件的大小来显示图片,可以通过以下代码实现:

    if(m_image2.IsNull())    //判断有无图像  
            return;   
    // 取得客户区尺寸  
    CRect zcRect;  
    GetDlgItem(IDC_STATIC_PIC2)->GetClientRect(&zcRect);   
    // 将图像显示在界面之上  
    m_image2.Draw(GetDlgItem(IDC_STATIC_PIC2)->GetDC()->m_hDC,  
                                zcRect.left,  
                                zcRect.top,  
                                zcRect.Width(),  
                                zcRect.Height());
     

    当然,可以十分简单的用

    image->Draw(this->GetDC()->m_hDC,0,0);即可

    可以通过image->SetPixel(10,10,RGB(255,0,0));对图片上的(10,10)像素修改为红色

  • 相关阅读:
    UML类图学习总结
    Java和C# RSA加解密相互通信和使用公钥加密传输
    C#des加密算法指定键的大小对于此算法无效
    WCF--找不到具有绑定 BasicHttpBinding 的终结点的与方案 https 匹配的基址。注册的基址方案是 [http]。
    IIS7 使用server farms 进行负载均衡
    iis7 未注册framework4 导致 莫名的404错误
    启用代理导致 有道云笔记未知错误、网络错误和OneDrive断线
    AspNetCore发布到Centos7
    c# 操作临时数据---XML操作
    c# 获取程序目录
  • 原文地址:https://www.cnblogs.com/lujin49/p/5285736.html
Copyright © 2011-2022 走看看