MFC 關於MFC中CImage的簡單使用

 

首先要將#include <atlimage.h>加進來,開始時我加到stdafx.h中,但一直提示windows.h被重複引入的問題,後將其加在別的頭文件中,就能夠了..   --!windows

1、圖片的載入函數

若是須要在界面上顯示的是已經存在的圖片,那麼須要將待顯示的圖片載入至CImage對象之中,CImage提供了四個載入函數:this

HRESULT Load(LPCTSTR pszFileName) throw( );spa

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));

在實際中,第一種方法會出現沒法載入圖片的狀況,目前我還不太清楚緣由,但願知道的網友指教

 

2、圖片的顯示

將圖片載入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)像素修改成紅色

相關文章
相關標籤/搜索