CxImage::Encode时程序崩溃

lizhigang34 2010-04-24 12:03:43
内存中,我得到一张位图(HBITMAP hbmp),现在我想用CxImage在内存中,把BMP数据转换成JPG数据,代码如下:

CxImage img;
img.CreateFromHBITMAP(hbmp);
long size=0;//得到图像大小
BYTE* buffer=0;//存储图像数据的缓冲
img.Encode(buffer, size, CXIMAGE_FORMAT_JPG);//把image对象中的图像以type类型数据copy到buffer

在image.Encode时,程序崩溃了,提示信息:

Windows 已在 XXX.exe 中触发一个断点。
其原因可能是堆被损坏,这也说明 XXX.exe 中或它所加载的任何 DLL 中有 bug。
输出窗口可能提供了更多诊断信息

第一次使用CxImage,先谢谢大家了:)
...全文
425 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
验证码识别 2010-04-24
  • 打赏
  • 举报
回复
cxImage.SetJpegQuality(

有个这个函数,设置JPG的压缩效果的
JPG是有损压缩
验证码识别 2010-04-24
  • 打赏
  • 举报
回复
我晕了
验证码识别 2010-04-24
  • 打赏
  • 举报
回复

BYTE* buffer=0;//存储图像数据的缓冲
img.Encode(&buffer, size, CXIMAGE_FORMAT_JPG);


(&buffer

试试
Vector_fz 2010-04-24
  • 打赏
  • 举报
回复
CXImage或者GDI+
NB点的用OPENCV
lizhigang34 2010-04-24
  • 打赏
  • 举报
回复
搞定了,原来是CxImage的BUG,我只编译了CxImage,生成的是静态库,使用这个静态库时,在CxImage::Encode和CxImage::Save时,都会使程序崩溃。
我再重新编译CxImageMfcDll,使用的是动态库,结果一切正常。

//使用CxImage,把bmp buffer转换成jpg buffer,然后再保存这张jpg,其实我主要是想得到jpg buffer。
CxImage img;
img.CreateFromHBITMAP(hbmp);
long size=0;//得到图像大小
BYTE* buffer=0;//存储图像数据的缓冲
img.Encode(buffer, size, CXIMAGE_FORMAT_JPG);//把image对象中的图像以type类型数据copy到buffer

CFile file;
file.Open("imgjpg.jpg", CFile::modeCreate | CFile::modeWrite);
file.Write(buffer, size);
file.Close();

还有个问题,就是一般在做图像编码时,你们都使用的是哪种库,不会自己写代码进行编码吧?这工作量太大了。
lizhigang34 2010-04-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 icedmilk 的回复:]
有没有想过可能是你的img这个玩意儿出现了问题,img真的保存了一幅图像?
[/Quote]
CxImage img;
img.CreateFromHBITMAP(hbmp);
我的hbmp是肯定对的,我能把他显示,并且保存成位图文件,CreateFromHBITMAP我就不知道CxImage做了什么了。。
你还有别的办法吗,我只是想在内存中,把bmp buffer转换成jpg buffer...
Icedmilk 2010-04-24
  • 打赏
  • 举报
回复
有没有想过可能是你的img这个玩意儿出现了问题,img真的保存了一幅图像?
lizhigang34 2010-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiuxianshen 的回复:]
恩,应该是buffer没有分配空间的问题
[/Quote]
我原也是这样想的,但是看到网上别人的教程都是这样做的,不需要分配空间。

bool CxImage::Encode ( BYTE *& buffer,
long & size,
DWORD imagetype
) [inherited]

Saves to memory buffer the image in a specific format.

Parameters:
buffer,: output memory buffer pointer. Must be NULL, the function allocates and fill the memory, the application must free the buffer, see also FreeMemory().
size,: output memory buffer size.
imagetype,: file format, see ENUM_CXIMAGE_FORMATS

除了CxImage,还有其他的办法对BMP类型的数据进行压缩编码吗?我就是想把bmp buffer编码成jpg buffer,整个过程全在内存中,不需要通过保存文件来转换。
我试过用ffmpeg来编码,结果一直也是失败的。
xiuxianshen 2010-04-24
  • 打赏
  • 举报
回复
恩,应该是buffer没有分配空间的问题
Eleven 2010-04-24
  • 打赏
  • 举报
回复
你的buffer没有分配内存空间??
就不知道它的CxImage类中的Encode函数里有没有对buffer分配空间的操作,你可以到他的源代码看看

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧