zoukankan      html  css  js  c++  java
  • 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. }  


    真相大白!

  • 相关阅读:
    【u020】Couple number
    【HDU5748】Bellovin
    【CF706C】Hard problem
    【u021】广义斐波那契数列
    【u024】没有上司的舞会
    【u025】贝茜的晨练计划
    【u026】房间最短路问题
    Core Data 数据出现Fault
    Core Data 数据出现Fault
    非常优秀的Javascript(AJAX) 开发工具:Aptana
  • 原文地址:https://www.cnblogs.com/lidabo/p/6923446.html
Copyright © 2011-2022 走看看