使用 libjpeg 库解压数据示例

时间:2022-04-09 03:00:16
static int MjpegDecompress( *** )
{
struct jpeg_decompress_struct tDInfo;
struct jpeg_error_mgr jerr;
unsigned char *buffer = NULL; cinfo.err = jpeg_std_error(&jerr); /* 申请并初始化一个 JPEG decompression object */
jpeg_create_decompress(&cinfo); /* 这里有两种方式来传入待解压的源文件 */ /* 1. 提供源文件的描述符 infile */
jpeg_stdio_src(&cinfo, infile);
/* 2. 提供源文件的内存地址及长度 */
jpeg_mem_src(&cinfo,inbuf,size); /* 读取 Jpeg 文件的文件头 */
jpeg_read_header(&cinfo, TRUE); /* 开始解压 Jpeg 文件 */
jpeg_start_decompress(&cinfo); /* 分配 scanline 所需的缓冲区 */
buffer = (unsigned char *) malloc(cinfo.output_width * cinfo.output_components); if (NULL == buffer)
return -1; while (cinfo.output_scanline < cinfo.output_height)
{
/* 将解压完成的数据存入 buffer */
jpeg_read_scanlines(&cinfo, &buffer, 1); {
/* 对数据进行操作 */
}
} /* 完成 Jpeg 的解码,释放 Jpeg 文件 */
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo); /* 释放缓冲区 */
free(buffer); return 0;
}