码迷,mamicode.com
首页 > 其他好文 > 详细

CxImage内存方式转换图像

时间:2017-05-31 14:17:50      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:nbsp   mat   函数返回值   details   长度   缺陷   turn   type   tool   

最近,处于项目需要,需要将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. }  
技术分享


真相大白!

CxImage内存方式转换图像

标签:nbsp   mat   函数返回值   details   长度   缺陷   turn   type   tool   

原文地址:http://www.cnblogs.com/lidabo/p/6923446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!