之前每次用到圖片處理,總要去找些主流開源庫,後來才發現CxImage這個開源工程還蠻好用,支持BMP、GIF、ICO、JPG、PNG、TIFF等格式,對普通應用程序開發者而言,都不是專門研究圖像編解碼,再者圖片、視頻、音樂這幾種文件格式也是最混亂,版本也最繁雜,兼容問題永遠解不完......剛看到CxImage工程會感覺很大很繁雜,但其實使用起來,比起用開源視頻解碼庫要少多多了,非常方便。
本文僅演示CxImage在VC++ 6.0用法,更多功能演示可參考官方鏈接及其demo程序。
CxImage是個C++圖像處理庫,可載入、保存、顯示和轉換圖像,支持透明圖層、多圖層,支持BMP、GIF、JPG、PNG、MNG、TIF、ICO、TGA、PCX、J2K、JBG、RAS、PNM、RAW及PSD等格式圖像文件。
Demo工程支持VC++ 及 Visual Studio編譯環境。
下載地址:http://sourceforge.net/projects/cximage/
解壓到當前工程MyTest的CxImage目錄下。CxImage工程鏈接方式支持靜態鏈接和動態鏈接方式。本文介紹靜態鏈接方式。如果您想測試自帶的Demo程序則直接使用其目錄下的demo工程,直接就可編譯運行。
添加CxImage工程到當前工程MyTest下
包括:
cximage目錄下的其它圖像庫,根據需要添加。
程序鏈接在工程Setting——LINK裡設置,注意Debug版本和Release版本需對應設置。
圖像格式支持,可修改頭文件:cximage/Cximage/ximacfg.h中的下面一段(1——表示支持,0表示不支持也就是關閉):
配置方法參考下圖(來源於下文官方鏈接),注意需要幾種庫,那麼ximacfg.h配置、MyTest設置鏈接庫、MyTest工程內子工程三者要對應:
CxImage支持Debug、Release、Unicode Debug、Unicode Release版本編譯,注意需要跟MyTest自己工程對應。先編CxImage庫,再編譯MyTest工程。
如下程序演示,使用CxImage庫並加載一張jpg圖片,然後繪制到靜態文本控件裡的全部過程。摘自自己以前的程序片段:
#include "cximage\CxImage\ximage.h" CxImage *m_pCSample; HBITMAP m_SampleBitMap; m_SamplePic.ModifyStyle(SS_BLACKFRAME,SS_BITMAP|SS_CENTERIMAGE); if(m_pCSample != NULL) { delete m_pCSample; m_pCSample=NULL; } m_pCSample = new CxImage(); m_pCSample ->Load("sample.jpg",CXIMAGE_FORMAT_JPG); if(m_pCSample ->AlphaIsValid())//Refer to CxImage::Mix m_pCSample ->AlphaCreate(); m_iImageHeight = m_pCSample ->GetHeight(); m_iImageWidth = m_pCSample ->GetWidth(); //HDC hDC = ::GetDC(NULL);//ok HDC hDC = m_SamplePic.GetDC()->m_hDC;//ok //Resample CRect lRect; m_SamplePic.GetClientRect(&lRect); m_pCSample->Resample(lRect.right,lRect.bottom); //Display if (m_SampleBitMap) { DeleteObject(m_SampleBitMap); m_SampleBitMap=NULL; } m_SampleBitMap = m_pCSample->MakeBitmap(hDC); m_SamplePic.SetBitmap(m_SampleBitMap);
仔細浏覽了一下,從上到下基本是完整的,除了m_SamplePic是static空間的控制變量,這個沒加進來。
使用CxImage工程時,因為封裝的太過傻瓜化,所以,經常發現您需要的功能總是不知如何實現,這時可通過如下方法:
1、閱讀cximage.h這個文件下函數聲明
2、結合demo程序,凡是需要的功能基本全部可以跟蹤出來具體的用法
3、下面的官方參考網址示例