CxImage內存方式轉換圖像


最近,處於項目需要,需要將Bmp轉換為JPEG格式。以前做過,采用的是GDI+的方式,該方式有一個極大地缺陷為無法實現跨平台處理。閑話少說,進入正題。

[cpp]  view plain  copy
 
  1. CxImage cxImageBmp(pRGBBuffer, dwRGBSize, CXIMAGE_FORMAT_BMP);  
  2.   
  3. cxImageBmp.Save("D:\\ttt.jpg",CXIMAGE_FORMAT_JPG);  


該方式很正常,順利將RGB格式24位BMP圖像轉化為本地JPG文件並保存下來。

 

但是采用以下內存轉換方式,卻失敗了。

[cpp]  view plain  copy
 
  1. BYTE* pJpgDataTemp = new BYTE[1024 * 1024];  
  2.   
  3. int lJpgSize = 0;  
  4.   
  5. bool b = cxImageBmp.Encode(pJpgDataTemp, lJpgSize, CXIMAGE_FORMAT_JPG);  


一方面,函數返回值為false;另一方面,數據長度,lJpgSize為0。

 

后來,經過以下修改,成功。

[cpp]  view plain  copy
 
  1. BYTE* pJpgDataTemp =NULL;  
  2.   
  3. int lJpgSize = 0;  
  4.   
  5. bool b = cxImageBmp.Encode(pJpgDataTemp,lJpgSize,CXIMAGE_FORMAT_JPG);  

 

為什么?下面我們從CxImage::Encode()定義中進行查看:

[cpp]  view plain  copy
 
  1. bool CxImage::Encode(BYTE * &buffer, long &size, DWORD imagetype)  
  2. {  
  3. if (buffer!=NULL)  
  4.   
  5. {  
  6. strcpy(info.szLastError,"the buffer must be empty");  
  7. return false;  
  8. }  
  9.   
  10.   
  11. CxMemFile file;  
  12. file.Open();  
  13. if(Encode(&file,imagetype))  
  14. {  
  15. buffer=file.GetBuffer();  
  16. size=file.Size();  
  17. return true;  
  18. }  
  19.   
  20.   
  21. return false;  
  22. }  


真相大白!


免責聲明!

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



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