cimage

cimage

CImage類是ATL和MFC共用的一個類,其頭文件為atlimage.h,主要用於圖片文件的打開,顯示與保存。這裡需要注意的是,在VS2010VS2012MFC編程中,不需要將頭文件包含進來。MFC中要使用CImage類,必須先將頭文件包含進來,可以包含在當前代碼的CPP文件中,也可以包含在所屬類的頭文件中,不過最好還是包含在工程的stdafx.h文件中。CImage總共有39個成員函數。

行為


保存圖片

保存圖片只有一個函數,就是Save函數,該函數有兩個參數,一個是文件的完整路徑和文件名,一個是文件的擴展名。但是如果只有保存和顯示圖片功能,CImage的Save函數發揮不了太大的作用,不過是一個轉存文件的工具。CImage的強大之處在於可以對圖片進行修改,再進行保存。
修改圖片的函數有這麼3個函數可以修改圖片,都是像素級的操作。這三個函數分別為SetPixelSetPixelRGB,SetPixelIndexed。可以通過雙重循環對屏幕進行逐點掃描,並把像素顏色值保存到CImage對象中達到截屏的目的。
我們可以用一段很簡單的代碼來實現將DC(設備上下文)里繪製的圖形存入圖片文件中。基本的思想是先初始化一個CImage對象,再為它設定大小和位數,也就是圖片大小和圖片的色彩總數,再用設備上下文繪圖。繪製完圖形后再建立另外一個設備上下文對象,稱為目的DC,將之前繪圖的DC稱為源DC,目的DC必須與CImage對象關聯起來,然後利用BitBlt函數和其他函數將繪圖DC的內容拷貝到目的DC中,最後將CImage對象保存到文件中,以下是代碼實現(VS2010支持中文變數名):
CRect rect;
this->GetClientRect(rect);
CImage image;
image.Create(rect.Width(),rect.Height(),24);
CDC* DCpoint=this->GetDC();
DCpoint->Ellipse(20,20,200,200);
CDC dstDC;
dstDC.CreateCompatibleDC(DCpoint);
dstDC.SelectObject(image);
dstDC.BitBlt(0,0,rect.Width(),rect.Height(),DCpoint,0,0,SRCCOPY);
image.Save(L"D:\\用戶目錄\\Pictures\\寫圖片文件.jpg");

顯示圖片

首先看下面這段代碼
CImage image;
image.Load(L"D:\\用戶目錄\\Pictures\\example.jpg");
image.Draw(GetDC()->m_hDC,CRect(0,0,320,240));
CImage類支持以Load方法讀取本地磁碟上的文件,並用Draw方法來顯示圖片。CIamge類的成員函數中還有很多可以實現顯示圖片。例如BitBlt辦法。如以下代碼:
image.BitBlt(GetDC()->m_hDC,0,0,320,240,0,0,SRCCOPY);
Bitblt方法同CDC類的Bitblt函數一樣,是一比一地複製圖像並顯示在屏幕上,支持對源圖像取反,也就是反色顯示。這樣功能通過BitBlt的最後一個參數來實現,比如參數為NOTSRCCOPY就是反色顯示。
MaskBlt可以將圖片與目的圖片進行特殊的光柵操作並進行掩碼處理。
PlgBlt函數可以將圖片拉伸成平行四邊形進行顯示。
StretchBlt函數可以將圖片進行拉伸顯示。

創建圖片


CImage的Creat函數和CreatEx函數用來創建空白圖片,編程人員可以利用這個函數來創建圖像,並添加代碼讓用戶可以使用滑鼠來改變CImage對象的像素顏色,以實現類似於windows畫圖的功能。