一個比CBitmap更優秀的類 ----- CImage

 前兩天有個朋友讓我幫他編一個圖象處理方面的程序,需要支持目前常見的圖像格式.這可把我難住了.一直以來都只會用Visual C++的CBitmap類加載各種位圖資源,然後處理.Visual C++的CBitmap類的功能是比較弱的,它只能顯示出在資源中的圖標、位圖、光標以及圖元文件的內容,而不像VB中的Image控件可以顯示出絕大多數的外部圖像文件(BMP、GIF、JPEG等)。如果想要在對話框或其他窗口中顯示外部圖像文件則只能藉助於第三方提供的控件或代碼,未免過於繁瑣.
    這陣子在學C#,裝了visual studio2003.索性在網上找了一下,竟然發現.net引入了一個功能非常強大的新類 ----- CImage.有了CImage類,Visual C++在圖像方面的缺憾將一去不復返。CImage是MFC和ATL共享的新類,它能從外部磁盤中調入一個JPEG、GIF、BMP和PNG格式的圖像文件加以顯示,而且這些文件格式可以相互轉換。例如通過簡單的幾句,就可以實現CImage類和CBitmap類實例的:

 

HBITMAP hBitmap=image.Detach();
CBitmap bmp;
bmp.Attach(hBitmap); 

 

這樣一來,就又迴歸到以前操縱CBitmap的方式了.CImage本身封裝了DIB(設備無關位圖)的功能,因而能夠處理每個位圖像素。

它具有下列最酷特性:
  1、AlphaBlend支持像素級的顏色混合,從而實現透明和半透明的效果。
  2、PlgBlt能使一個矩形區域的位圖映射到一個平行四邊形區域中,而且還可能使用位屏蔽操作。
  3、TransparentBlt在目標區域中產生透明圖像,SetTransparentColor用來設置某種顏色是透明色。
  4、MaskBlt在目標區域中產生源位圖與屏蔽位圖合成的效果。

由於CImage在不同的Windows操作系統中其某些性能是不一樣的,因此在使用時要特別注意。例如,CImage::PlgBlt和CImage::MaskBlt只能在 Windows NT 4.0 或更高版本中使用,但不能運行在Windows 95/98 應用程序中。CImage::AlphaBlend和CImage::TransparentBlt也只能在 Windows 2000/98或其更高版本中使用。即使在Windows 2000運行程序還必須將stdafx.h文件中的WINVER和_WIN32_WINNT的預定義修改成0x0500才能正常使用。

使用CImage的一般方法
  (1) 打開應用程序的stdafx.h文件添加CImage類的包含文件:
#include <atlimage.h>
  (2) 定義一個CImage類對象,然後調用CImage::Load方法裝載一個外部圖像文件。
  (3) 調用CImage::Draw方法繪製圖像。

將圖片用其它格式保存
  CImage::Save方法能將一個圖像文件按另一種格式來保存,它的原型如下: 

HRESULT Save( LPCTSTR pszFileName, REFGUID guidFileType= GUID_NULL);


  其中,pszFileName用來指定一個文件名,guidFileType用來指定要保存的圖像文件格式,當爲GUID_NULL時,其文件格式由文件的擴展名來決定,這也是該函數的默認值。它還可以是GUID_BMPFile(BMP文件格式)、GUID_PNGFile(PNG文件格式)、GUID_JPEGFile(JPEG文件格式)和GUID_GIFFile(GIF文件格式)。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章