VC++使用CImage在內存中Jpeg轉換Bmp圖片


VC++中Jpeg與Bmp圖片格式互轉應該是會經常遇到,Jpeg相比Bmp在圖片大小上有很大優勢。

本文重點介紹使用現有的CImage類在內存中進行轉換,不需要保存為文件,也不需要引入第三方庫。

Libjpeg庫在8以后也支持了內存讀取和轉換,不過使用起來較為麻煩,還需要手動編譯,用CImage類完全可以實現,代碼更簡潔。

實現方法:

VC++對Jpeg、Png圖片的操作主要使用CImage,相信很多人用過CImage的Load和Save函數從文件讀取或保存Jpeg或Png格式的文件,這兩個重載了從流中讀取和寫入。

 

具體可參考MSDN:http://msdn.microsoft.com/zh-cn/library/tf4bytf8.aspx

使用CImage從內存中讀取Jpeg格式的圖片,只需要傳入一個IStream接口的流,IStream對象使用CreateStreamOnHGlobal進行創建。

下面貼出在內存中Jpeg轉換Bmp的函數代碼:

 1 void JPEG2BMP(char* pUnZipData,unsigned long ulUnZipDataLen, CImage* pImage)
 2 {
 3     HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, ulUnZipDataLen);  
 4     void* pData = GlobalLock(hGlobal);  
 5     memcpy(pData, pUnZipData, ulUnZipDataLen);  
 6     GlobalUnlock(hGlobal);  
 7 
 8     IStream* pStream = NULL;  
 9     if(CreateStreamOnHGlobal(hGlobal, TRUE,  & pStream) == S_OK)  
10     {
11         CImage image;  
12         if (SUCCEEDED(pImage->Load(pStream)))  
13         {
14             
15         }   
16         pStream -> Release();       
17     }   
18     GlobalFree(hGlobal);  
19 }
pUnZipData為Jpeg圖片數據的指針,ulUnZipDataLen為圖片數據的長度。

記錄,為更好的自己!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM