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