Linux下jpeg解码方法

这篇博客详细介绍了在Linux系统中如何使用C语言进行JPEG图像解码。首先通过fopen打开文件,然后初始化JPEG解码对象并设置错误处理。接着读取JPEG头信息,判断图像尺寸是否合适。如果合适,则分配内存缓冲区,读取扫描线完成解压缩过程。最后,释放资源并关闭输入文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 if ((infile = fopen(jpg_filename, "rb")) == NULL)
{
     fprintf(stderr, "open %s failed/n", jpg_filename);
     return(-1);

 /*
   init jpeg decompress object error handler
  */
 cinfo.err = jpeg_std_error(&jerr);
 jpeg_create_decompress(&cinfo);

 /*
  * bind jpeg decompress object to infile
  */
 jpeg_stdio_src(&cinfo, infile);


 /*
  * read jpeg header
  */
 jpeg_read_header(&cinfo, TRUE);

 /*
  * decompress process.
  * note: after jpeg_start_decompress() is called
  * the dimension infomation will be known,
  * so allocate memory buffer for scanline immediately
  */
 jpeg_start_decompress(&cinfo);
 if ((cinfo.output_width > 320) ||
  (cinfo.output_height > 240)) {
  printf("too large JPEG file,cannot display/n");
  return (-1);
 }

 buffer = (unsigned char *) malloc(cinfo.output_height * cinfo.output_width *  cinfo.output_components);
    buffer_tmp = buffer;
 y = 0;
 while (cinfo.output_scanline < cinfo.output_height) {
  jpeg_read_scanlines(&cinfo, &buffer_tmp, 1);

        buffer_tmp +=  cinfo.output_width *cinfo.output_components;
       // next scanlin
  //printf("read %d/n",y++);
 }

 /*
  * finish decompress, destroy decompress object
  */
 jpeg_finish_decompress(&cinfo);
 jpeg_destroy_decompress(&cinfo);

 /*
  * release memory buffer
  */
 //free(buffer);

 /*
  * close jpeg inputing file
  */
 fclose(infile);

 

 return buffer;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值