程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> MFC 關於MFC中CImage的簡單使用,mfccimage使用

MFC 關於MFC中CImage的簡單使用,mfccimage使用

編輯:C++入門知識

MFC 關於MFC中CImage的簡單使用,mfccimage使用


 

首先要將#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)像素修改為紅色

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved