CxImage内存方式转换图像
最近,处于项目需要,需要将Bmp转换为JPEG格式。以前做过,采用的是GDI+的方式,该方式有一个极大地缺陷为无法实现跨平台处理。闲话少说,进入正题。
- CxImage cxImageBmp(pRGBBuffer, dwRGBSize, CXIMAGE_FORMAT_BMP);
 - cxImageBmp.Save("D:\\ttt.jpg",CXIMAGE_FORMAT_JPG);
 
该方式很正常,顺利将RGB格式24位BMP图像转化为本地JPG文件并保存下来。
但是采用以下内存转换方式,却失败了。
- BYTE* pJpgDataTemp = new BYTE[1024 * 1024];
 - int lJpgSize = 0;
 - bool b = cxImageBmp.Encode(pJpgDataTemp, lJpgSize, CXIMAGE_FORMAT_JPG);
 
一方面,函数返回值为false;另一方面,数据长度,lJpgSize为0。
后来,经过以下修改,成功。
- BYTE* pJpgDataTemp =NULL;
 - int lJpgSize = 0;
 - bool b = cxImageBmp.Encode(pJpgDataTemp,lJpgSize,CXIMAGE_FORMAT_JPG);
 
为什么?下面我们从CxImage::Encode()定义中进行查看:
- bool CxImage::Encode(BYTE * &buffer, long &size, DWORD imagetype)
 - {
 - if (buffer!=NULL)
 - {
 - strcpy(info.szLastError,"the buffer must be empty");
 - return false;
 - }
 - CxMemFile file;
 - file.Open();
 - if(Encode(&file,imagetype))
 - {
 - buffer=file.GetBuffer();
 - size=file.Size();
 - return true;
 - }
 - return false;
 - }
 

真相大白!
CxImage内存方式转换图像的更多相关文章
- 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换
		
在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...
 - Java的String.valueOf 转换 与、空串+类型变量转换与封装类(Integer)的toString方式转换比较。
		
1.空串+类型变量方式转换 int i=20; String s=""+i; 这种方式实际上经过了两个步骤,首先进行了i.ToString()把 i 转换为 字符串,然后再进行加法 ...
 - opencv2 矩阵方式 resize图像缩放代码(转载)
		
http://blog.sina.com.cn/s/blog_74a459380101r0yx.html opencv2 矩阵方式 resize图像缩放代码(转载) (2014-05-16 09:55 ...
 - STM32内存受限情况下摄像头驱动方式与图像裁剪的选择
		
1.STM32图像接收接口 使用stm32芯片,128kB RAM,512kB Rom,资源有限,接摄像头采集图像,这种情况下,内存利用制约程序设计. STM32使用DCMI接口读取摄像头,协议如下. ...
 - Memory Translation and Segmentation.内存地址转换与分段
		
原文标题:Memory Translation and Segmentation 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精 ...
 - CxImage整理(叠加字符/图像合并)
		
//CxImage叠加字符 void CCxImageTestDlg::OnBnClickedButton1() { CxImage imgJPG; // 定义一个CxImage对象 imgJPG.L ...
 - C语言中的联合体union所占内存方式
		
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union).在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构: ...
 - .net中清理内存,清理占用内存方式方法
		
#region 内存回收 [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize") ...
 - 【OpenCV】三种方式操作图像像素
		
OpenCV中,有3种访问每个像素的方法:使用at方法.使用迭代器方法.使用指针 运行如下程序后可以发现使用at方法速度最快. 代码如下: //操作图像像素 #include <opencv2/ ...
 
随机推荐
- [SCOI 2009] 生日快乐
			
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1024 [算法] 直接DFS,即可 [代码] #include<bits/std ...
 - 队列(FIFO)详解
			
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
 - BZOJ 4358 坑 莫队+线段树 死T
			
这是一个坑 竟然卡nsqrt(n)logn T死 等更 //By SiriusRen #include <cmath> #include <cstdio> #include & ...
 - unwrap
			
node.replaceWith(...node.childNodes);
 - Java 开源博客 —— Solo 0.6.9 发布了!
			
Solo 是 GitHub 上 Star 数最多的 Java 博客系统,今天我们发布了 0.6.9 正式版,欢迎大家下载. 特性 基于标签的文章分类 博客/标签 Atom/RSS.Sitemap 输出 ...
 - android 给imageView,文字等加上阴影[记录]
			
1.链接 https://github.com/Devlight/ShadowLayout 2.效果 3.code compile 'com.github.devlight.shadowlayout: ...
 - Hibernate框架学习(四)——事务
			
一.回顾事务的概念http://www.cnblogs.com/cxq1126/p/8313600.html 1.特性ACID:原子性.一致性.隔离性.持久性 2.并发问题:脏读.不可重复读.幻|虚读 ...
 - c# ExecuteScalar()
			
ExecuteScalar这个方法是从数据库中检索单个值返回值是object类型,必须用与它在数据库里存放的类型相同类型或者可以转换成的类型,比如数据是nchar类型值为 "123" ...
 - java 读写分离
			
源码地址:http://git.oschina.net/xiaochangwei 先回答下 1.为啥要读写分离? 大家都知道最初开始,一个项目对应一个数据库,基本是一对一的,但是由于后来用户及数据还有 ...
 - HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】
			
算法分析: 这个问题很显然可以转化成一个二分图最佳匹配的问题.把田忌的马放左边,把齐王的马放右边.田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边:如果平局,则连一条权为0的边:如果输 ...