具体的参考文章《如何使用libjpeg(rgb2jpeg)》和http://groups.google.com/group/openjpeg/browse_thread/thread/331e6cf60f70797f/e3c5b46797986c04?pli=1
通过实际实验,文章《如何使用libjpeg(rgb2jpeg)》所提供的方法是有效的,并且改动也比网上的其他方法小更多(测试使用libjpeg-6b).
需要注意的是文章《如何使用libjpeg(rgb2jpeg)》中计算编码后的jpeg数据大小的方法有误,原代码如下:
bool JpegCompress(int w,int h,const char * rgb_data,int rgb_size,
char * jpeg_data,int *jpeg_size){
// 此处省略多行代码...
jpegDstManager.next_output_byte = (unsigned char*)jpeg_data;
jpegDstManager.free_in_buffer = left_size;
jpegDstManager.init_destination = JpegInitDestination;
jpegDstManager.empty_output_buffer = JpegEmptyOutputBuffer;
jpegDstManager.term_destination = JpegTermDestination;
jpeg_start_compress(&cinfo, TRUE);
for(int y=0;y< h;y++){
rowPointer[0] = (unsigned char*)(rgb_data + y*w*3);
ret = jpeg_write_scanlines(&cinfo, rowPointer, 1);
}
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
*jpeg_size = left_size - jpegDstManager.free_in_buffer;
return true;
}
其中,应将"*jpeg_size = left_size - jpegDstManager.free_in_buffer;"换为"*jpeg_size = jpegDstManager.next_output_byte - jpeg_data;"也就是将内存中的结束地址减去首地址,便是正确的内存大小.
分享到:
相关推荐
纯C语言+libjpeg实现最简单jpeg图片解码显示程序
利用libjpeg库解码内存中的jpeg数据范例,详情请参考http://blog.csdn.net/weixinhum/article/details/43089047
2、初始化解码对象 要使用libjpeg解码jpeg数据,这步是必须要做的 4、读取jpeg文件的头信息 这个和初始化解码对象一样,是必须要调用的,
不过还是推荐使用turbo libJpeg,使用SIMD指令集以后,加速很多,并且提供了文件和内存两种编解码接口,就不存在上面提到的问题了。 文件中的“头文件与静态库.rar”可以直接拿来使用,如果要自己编译,就要用...
提供了整个项目工程的源码,可以直接在VS2013上运行。 参考说明:https://blog.csdn.net/fengweibo112/article/details/87889092
libjpeg实现内存内位图的压缩及解压缩
本软件包含修改后的libjpeg源代码,并提供了测试程序,演示了使用libjpeg直接处理内存中的图像,而无需借助文件操作。 针对有人说我是骗子这件事,特别说明:我的标题已经说的很清楚了,这个库本来就是我在Libjpeg库...
1、jpeg-test-arm目录下是测试修改后的动态库程序 2、libjpeg目录下是修改后的libjpeg源码 3、libjpeg.so.62.0.0是交叉编译修改libjpeg源码生成的动态库,arm平台下的。 4、具体修改步骤参考如下地址 ...
如何对内存中的jpeg图形数据进行解码!
stanford大学移动视频研究小组发布的jpeg编解码程序,学术演示目的,速度当然无法和现代的libjpeg相比,不过代码更容易读懂。 因为是92年发布的程序,可能在现有linux编译环境下会出现一点下问题,解决方法参考包内...
无需另写接口,直接使用:example.c 中的例程:GetBitMapFromJpeg() 和 GetJpegFromData()
1.在risc-v 平台上 能够解压 jpeg照片
libjpeg-turbo使用实例代码。包含jpeg解码成dib格式 绘制到界面上;jpeg格式图片转换成bmp格式图片;bmp格式图片转换成bmp格式图片。
libjpeg来声称jpeg文件,里面有完整代码,简单易用
YUV 任意尺寸缩放 jpeg 图片缩放问题,libjpeg 只支持 1/8, 1/4, 1/2, 1/1 的缩小。而 ffplay 对 Jpeg, 视频的缩放貌似不支持。 于是经过断断续续的编码和思考,“基本上” 解决了YUV420P格式的缩放问题。 这里的...
vs2008, 使用libjpeg从内存解压生成iplimage, 目前针对jpg,exif格式请自行跳过文件头0xFFE0 - 0xFFEF段内容
libjpeg-turbo是JPEG图像编解码器,它使用SIMD指令(MMX,SSE2,NEON,AltiVec)在x86,x86-64,ARM和PowerPC系统上加速基线JPEG压缩和解压缩。 在这样的系统上,libjpeg-turbo的速度通常是libjpeg的2-6倍,其他所有...
libJPEG库是用于编码数据为JPEG格式或者解码JPEG格式图片的常用库,OpenCV读取图像底层实现就是利用libJPEG库,而libJPEG-turbo则效率更高。libjpeg 功能全面强大持续更新特性 libjpeg-turbo 基于精简指令集优化,...
这是基于libjpeg的JPEG压缩代码
libjpeg-turbo 是一种 JPEG 图像编解码器,它使用 SIMD 指令加速 x86、x86-64、Arm、PowerPC 和 MIPS 系统上的基线 JPEG 压/解压缩,以及 x86、x86-64 和 Arm 系统上的渐进式 JPEG 压缩。 在这些系统上,如果其他...