使用libjpeg实现内存图像的压缩

jianghan1021 2010-12-14 01:35:06
我采用libjpeg提供的jpeg_mem_dest (j_compress_ptr cinfo, unsigned char ** outbuffer, unsigned long * outsize)方法
来对内存中的图像数据进行压缩,第三个参数outsize如何传递?
有人使用过这个函数吗?

注:以上这个函数在jpeg-8b版本中右,jpeg-6b版本中是没有的
...全文
745 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨笨D幸福 2013-08-05
  • 打赏
  • 举报
回复
我才用完这个函数。 原本我也以为是先分配一块内存延后将指针的地址传给他,但是经调试发现,原指针指向的地址块在使用之后没有变化,经多次测试发现,jpeg_mem_dest 内部分配了内存,所以不能将你事先分配好的内存指针给他。 可行的用法:

int* pBuf = NULL;
int iLen = 0;
jpeg_mem_dest(cinfo, &pBuf, &iLen)。

//然后
memcpy(/*你的缓冲区*/, pBuf, iLen);
//这样就可以了
qq120848369 2012-07-21
  • 打赏
  • 举报
回复
和zlib的字节流压缩接口一样的原理,步骤与原理:

1,malloc一块内存,存到int size = 10; char *p = malloc(size);里
2,传入jpeg_mem_dest(info, &p, &size)。
3,检查返回值size是否<10, 小于就说明图像压缩完了,因为给它传入的buffer它都没塞满。

当然zlib并没有size这个参数,zlib的判断方法是判断p指向的地址与p初始malloc的地址差多少字节来判断buffer是否填满,这也就是为什么传入一个指针的地址,因为函数将会修改地址来告诉调用者压缩是否完成。
wszdzh 2012-07-21
  • 打赏
  • 举报
回复
刚用完这个函数。。。。第三个参数是输出在outdata中的偏移量的 我把这个buffer写到文件里 能正常打开
forever803 2010-12-23
  • 打赏
  • 举报
回复
测试了下,不是我说的那样。郁闷,我也在研究这,你搞好了吗?能不能告诉我?
forever803 2010-12-23
  • 打赏
  • 举报
回复
unsigned long outsize=原始buff的大小;
...............
然后jpeg_mem_dest (cinfo, outbuffer, &outsize);
...........

调用jpeg_mem_dest()后,outsize=outbuffer的实际大小。

我也正在用libjpeg,希望能共同讨论

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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