CxImage内存方式转换图像

简介: 最近,处于项目需要,需要将Bmp转换为JPEG格式。以前做过,采用的是GDI+的方式,该方式有一个极大地缺陷为无法实现跨平台处理。闲话少说,进入正题。 [cpp] view plain copy   CxImage cxImageBmp(pRGBBuffer, dwRGBSize, CXIMAGE_FORMAT_BMP);      cxImageBmp.Save("D:\\ttt.jpg",CXIMAGE_FORMAT_JPG);   该方式很正常,顺利将RGB格式24位BMP图像转化为本地JPG文件并保存下来。

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


真相大白!

目录
相关文章
|
6月前
|
存储 传感器 监控
Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)
94 0
|
存储 安全 算法
Baumer工业相机堡盟工业相机如何通过BGAPISDK复制内存空间存储图像数据序列(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK复制内存空间存储图像数据序列(C#)
81 0
|
存储 传感器 监控
Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存(C++)
Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存(C++)
70 0
|
存储 开发工具 C++
Baumer工业相机堡盟相机如何通过BGAPI SDK将相机图像数据转换为Gdiplus::Bitmap并写入电脑内存最后释放保存到本地(C++)
Baumer工业相机堡盟相机如何通过BGAPI SDK将相机图像数据转换为Gdiplus::Bitmap并写入电脑内存最后释放保存到本地(C++)
107 0
|
存储 开发工具 C#
Baumer工业相机堡盟相机如何使用BGAPI SDK实现图像高速保存本地(内存保存方式)(C#)
Baumer工业相机堡盟相机如何使用BGAPI SDK实现图像高速保存本地(内存保存方式)(C#)
100 0
|
Dart 开发者
【Flutter】Image 组件 ( 内存加载 Placeholder | transparent_image 透明图像插件 )
【Flutter】Image 组件 ( 内存加载 Placeholder | transparent_image 透明图像插件 )
329 0
【Flutter】Image 组件 ( 内存加载 Placeholder | transparent_image 透明图像插件 )
|
API Android开发
【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
170 0
【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
|
存储 Java Linux
【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )
【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )
271 0
|
存储 Java 数据处理
【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )
【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )
403 0
|
存储 编解码 算法
【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV -> RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV -> RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
423 0