`
flytreeleft
  • 浏览: 93454 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

不修改源代码实现Libjpeg内存编解码jpeg

阅读更多

 

具体的参考文章《如何使用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;"也就是将内存中的结束地址减去首地址,便是正确的内存大小.

 

分享到:
评论

相关推荐

    修改libjpeg源码实现解码/压缩内存中的图像(保留原有接口)无需另写接口直接调用即可

    `GetBitMapFromJpeg()`函数应该是解码JPEG图像到内存中位图的接口。为了实现这个功能,你需要定义一个自定义的内存输入缓冲区结构,然后在解码过程中使用`jpeg_create_decompress`初始化解码器,`jpeg_stdio_src`...

    libjpeg实现YUV转JPEG源码(VS2013运行环境)

    《libjpeg实现YUV转JPEG源码解析与实践》 在数字图像处理领域,YUV和JPEG是两种常见的格式。YUV主要用于视频编码,而JPEG则广泛用于静态图像压缩。本篇文章将深入探讨如何利用libjpeg库将YUV格式的图像转换为JPEG...

    libjpeg-turbo编码、解码实例代码

    本实例代码主要涵盖了libjpeg-turbo库在解码JPEG图像到DIB格式并显示、JPEG与BMP格式之间的转换等关键操作。 首先,让我们了解JPEG和DIB格式的基础知识。JPEG(Joint Photographic Experts Group)是一种广泛使用的...

    libjpeg9e jpeg 图片解码

    本文将详细讲解在RISC-V架构平台上使用libjpeg9e库来解码JPEG图片的过程,以及涉及的相关技术点。 **一、RISC-V架构** RISC-V(Reduced Instruction Set Computing - Version 5)是一种开放源代码指令集架构,设计...

    win10 编译好的libjpeg库 (jpeg-9d)

    4. **编译过程**:在Windows 10上编译libjpeg库通常涉及下载源代码、配置编译器(如Visual Studio或MinGW)、设置编译选项,并执行编译和链接步骤。编译成功意味着库文件已经生成,可以被其他应用程序作为依赖来使用...

    libjpeg库的示例工程,实现Jpeg转Bmp

    6. **代码分析**:“JpegToBmp”源代码中可能包括了初始化libjpeg库、打开JPEG文件、读取图像数据、转换为BMP格式、写入BMP文件等一系列操作。理解这些步骤有助于学习如何使用libjpeg库进行实际开发。 7. **应用...

    libjpeg从内存生成iplimage

    2. **包含库和头文件**:在源代码中,引入libjpeg库所需的头文件,如`jpeglib.h`和`jerror.h`。同时,也需要包含OpenCV的头文件,如`opencv2/opencv.hpp`,以便使用iplimage。 3. **处理JPEG数据**:在内存中加载...

    wince 下evc平台解码jpg 、jpeg图片 源代码

    1. 获取libjpeg库的源代码并将其编译为适用于wince的目标代码。 2. 将编译后的库文件(通常是.lib或.dll)与你的项目链接。 3. 在EVC工程中,包含libjpeg库所需的头文件,例如"jpeglib.h"和"jerror.h"。 4. 实现JPEG...

    libjpeg实现jpg图片大小改变

    在调整图像大小的过程中,我们通常会先解码JPEG图像到RGB或YCbCr颜色空间,然后使用图像处理算法如双线性插值或最近邻插值来缩放图像,最后再重新编码成新的JPEG文件。 哈夫曼编码是JPEG压缩过程中的关键部分。JPEG...

    libjpeg-turbo 交叉编译aarch64 6.5.0 jpeg图像加速库

    2. 获取源代码:从libjpeg-turbo官方网站下载6.5.0版本的源代码,并解压到工作目录。 3. 配置编译选项:运行`./configure`时,需要指定目标架构和编译器路径。例如: ``` ./configure --host=aarch64-linux-gnu -...

    stm32h750 jpeg编解码

    在STM32H750上实现JPEG编解码,开发者可以使用开源库如OpenCV或独立的JPEG库如libjpeg-turbo。需要注意的是,由于微控制器资源有限,选择合适的库并进行优化至关重要,例如,可能需要裁剪不必要的功能,或者针对微...

    jpeg 文件 编解码源程序,及实例

    - **解码器实现**:解码器的源代码会包含熵解码、反量化、IDCT和图像重组的步骤。 - **实例应用**:提供的实例可能包括如何使用这些源代码来处理实际的JPEG文件,展示如何读取、压缩和解压缩图像。 4. **库和API*...

    JPEG处理源代码

    7. **源代码实现**:处理JPEG源代码可能涉及使用库如libjpeg或OpenCV,这些库提供了处理JPEG文件的API。源代码可能会包括读取JPEG文件,解析其段,进行DCT和量化操作,以及编码和写入新的JPEG文件。 8. **错误处理...

    实现jpeg内存图的压缩和解压缩

    通过上述步骤,我们可以实现在不修改libjpeg源代码的前提下,对内存中的位图数据进行JPEG格式的压缩和解压缩。这种方法不仅避免了文件I/O操作带来的性能损耗,还提高了数据处理的灵活性,特别适用于实时性要求高或...

    libjpeg移植资料含说明-gec6818开发板jpg格式图片显示

    1. 获取源代码:首先从官方网站或者开源社区获取libjpeg库的最新源代码。 2. 配置环境:确保开发板上已安装了必要的编译工具,如GCC编译器和Make工具。 3. 修改配置:根据gec6818的硬件特性,修改libjpeg的配置文件...

    cpp-ibjpegturbo是一个JPEG图像编解码器

    文件名“libjpeg-turbo-libjpeg-turbo-a4aa30d”可能指的是一个特定版本的libjpeg-turbo源码包,其中“a4aa30d”可能是Git仓库中的一个提交哈希,代表了该版本的源代码在开发历史中的一个特定状态。 总之,cpp-...

    jpeg解码,将jpeg解码成bmp格式

    JPEGDEC.C和JPEGAPP.C可能是实现这一过程的源代码文件。Huffman编码表根据图像数据的频率特性进行优化,使得频繁出现的值占用更少的位。 在解码过程中,我们还需要应用反量化步骤,将压缩的系数恢复到它们的原始值...

    VC编写JPEG解码程序。

    在第4章的压缩包文件中,可能包含了相关的源代码、头文件和说明文档,供读者参考和实践。通过阅读和分析这些文件,你可以学习到如何将JPEG解码程序集成到自己的VC++项目中,从而能够处理和显示JPEG格式的图像。 总...

    基于libjpeg的将yuv转成jpg

    为了更好地理解这个过程,你可以查看这个文件的内容,包括源代码、输入YUV图像文件以及可能的输出JPEG图像,以了解具体实现细节。 总之,通过libjpeg库,我们可以高效地实现YUV到JPEG的转换,这对于多媒体处理、...

    jpeg.zip_Jpeg解码_jpeg_jpeg文件

    1. LIBJPEG.TXT - 这可能是关于libjpeg库的文档,libjpeg是广泛使用的开源JPEG编解码库,提供了处理JPEG文件的C语言API,包括解码和编码功能。 2. README.TXT - 通常包含有关压缩包内容的说明、安装指南或使用注意...

Global site tag (gtag.js) - Google Analytics