解压步骤如下:
/*
Allocate and initialize a JPEG decompression object // 分配和初始化一个decompression结构体
Specify the source of the compressed data (eg, a file) // 指定源文件
Call jpeg_read_header() to obtain image info // 用jpeg_read_header获得jpg信息
Set parameters for decompression // 设置解压参数,比如放大、缩小
jpeg_start_decompress(…); // 启动解压:jpeg_start_decompress
while (scan lines remain to be read)
jpeg_read_scanlines(…); // 循环调用jpeg_read_scanlines
jpeg_finish_decompress(…); // jpeg_finish_decompress
Release the JPEG decompression object // 释放decompression结构体
*/
代码:

int main(int argc, char **argv)
{struct jpeg_decompress_struct cinfo;struct jpeg_error_mgr jerr;FILE * infile;int row_stride;unsigned char *buffer;if (argc != 2){printf("Usage: \n");printf("%s <jpg_file>\n", argv[0]);return -1;}if (FBDeviceInit()){return -1;}FBCleanScreen(0);// 分配和初始化一个decompression结构体cinfo.err = jpeg_std_error(&jerr);jpeg_create_decompress(&cinfo);// 指定源文件if ((infile = fopen(argv[1], "rb")) == NULL) {fprintf(stderr, "can't open %s\n", argv[1]);return -1;}jpeg_stdio_src(&cinfo, infile);// 用jpeg_read_header获得jpg信息jpeg_read_header(&cinfo, TRUE);/* 源信息 */printf("image_width = %d\n", cinfo.image_width);printf("image_height = %d\n", cinfo.image_height);printf("num_components = %d\n", cinfo.num_components);// 设置解压参数,比如放大、缩小printf("enter scale M/N:\n");scanf("%d/%d", &cinfo.scale_num, &cinfo.scale_denom);printf("scale to : %d/%d\n", cinfo.scale_num, cinfo.scale_denom);// 启动解压:jpeg_start_decompress   jpeg_start_decompress(&cinfo);/* 输出的图象的信息 */printf("output_width = %d\n", cinfo.output_width);printf("output_height = %d\n", cinfo.output_height);printf("output_components = %d\n", cinfo.output_components);//解压的是rgb,故为3元素// 一行的数据长度row_stride = cinfo.output_width * cinfo.output_components;buffer = malloc(row_stride);//分配空间用来存储一行数据// 循环调用jpeg_read_scanlines来一行一行地获得解压的数据while (cinfo.output_scanline < cinfo.output_height) {(void) jpeg_read_scanlines(&cinfo, &buffer, 1);// 写到LCD去FBShowLine(0, cinfo.output_width, cinfo.output_scanline, buffer);//一行行的将数据写到LCD上去}free(buffer);jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);return 0;
}

rgb压缩为jpeg代码:

int write_jpeg_file(const char* jpeg_file, unsigned char* rgb_buffer, int width, int height, int quality)
{struct jpeg_compress_struct cinfo;struct jpeg_error_mgr jerr;int row_stride = 0;FILE* fp = NULL;JSAMPROW row_pointer[1];cinfo.err = jpeg_std_error(&jerr);jpeg_create_compress(&cinfo);fp = fopen(jpeg_file, "wb");if (fp == NULL){printf("open file %s failed.\n", jpeg_file);return -1;}jpeg_stdio_dest(&cinfo, fp);cinfo.image_width = width;cinfo.image_height = height;cinfo.input_components = 3;cinfo.in_color_space = JCS_RGB;//设置输入格式jpeg_set_defaults(&cinfo);jpeg_set_quality(&cinfo, quality, 1);  // todo 1 == truejpeg_start_compress(&cinfo, TRUE);row_stride = width * cinfo.input_components;while (cinfo.next_scanline < cinfo.image_height){row_pointer[0] = &rgb_buffer[cinfo.next_scanline * row_stride];jpeg_write_scanlines(&cinfo, row_pointer, 1);}jpeg_finish_compress(&cinfo);jpeg_destroy_compress(&cinfo);fclose(fp);return 0;}

libjpeg的简单使用相关推荐

  1. 图形图像基础 之 jpeg介绍

    一.[概念]jpeg相关概念简介 jpeg-一种影像有损压缩标准方法 后缀jpg/jpeg JPEG(Joint Photographic Experts Group 联合图像专家小组)是一种针对照片 ...

  2. libjpeg学习1:简单使用示例

    libjpeg这个库主要用于处理jpeg数据,比如将RGB压缩成JPEG,或者将JPEG解压为RGB.其实早在4年前已经接触过,但一直没写过这方面的文章.后来想想还是有必要写出来,至少可以证明自己搞过 ...

  3. libjpeg库的简单使用,rgb565与rgb888互转,以及色块的寻找

    最近用的摄像头OV2640摄像头,支持RGB565.JPEG.YUV和YCbCr格式的输出,想要对采集的图像进行色块识别,这样一般需要用到RGB格式的输出会比较好处理,数字图像处理中常用的采用模型是R ...

  4. libjpeg库的简单使用使用----jpeg图片解压

    libjpeg库其实已经可以满足我们日常处理日常简单图片之间的转换了.下面就来介绍一下jpeg库的解压和压缩过程. 首先来讲解压操作过程: 1.分配jpeg对象结构体空间,并初始化. 2.指定解压数据 ...

  5. libjpeg用法linux压缩,libjpeg学习1:简单使用示例

    #include #include #include #include #include #include #include // jpeg库头文件必须放到stdio.h后面 #include &qu ...

  6. Leptonica在VS2010中的编译及简单使用举例

    在tesseract-ocr中会用到leptonica库,这里对leptonica简单介绍下. Leptonica是一个开源的图像处理和图像分析库,它的license是BSD 2-clause.它主要 ...

  7. 一个简单视频网站开发小记

    前言 视频格式转换,视频图片截取,视频存储设计,大文件上传处理以及相关配置,前端视频播放,视频播放流畅度,每一个都不简单,都需要花心思思考解决方法!基本上每个问题,都是使用相应的开源库! 需求背景 手 ...

  8. 图像解码之一——使用libjpeg解码jpeg图片

    多媒体应用在现在电子产品中的地位越来越重要,尤其是在嵌入式设备中.本系列文章将会介绍利用libjpeg解码jpeg文件,libpng解码png文件,libgif解码gif文件.本文为第一篇,介绍使用l ...

  9. NDK集成libjpeg和libpng

    2019独角兽企业重金招聘Python工程师标准>>> 最近要在android上使用libjpeg和libpng库来做些图片的处理工作,下载了源码,在pc上使用configure & ...

最新文章

  1. 【 Notes 】ML ALGORITHMS of TOA - Based Positioning
  2. Ctrl+E快捷键,一键批量解决Excel中90%的问题!
  3. WinForm禁用窗体自带的关闭功能
  4. python集合排序_排序算法集合
  5. 虎牙直播张波:掘金Nginx日志
  6. aop统计请求数量_使用SpringAOP获取一次请求流经方法的调用次数和调用耗时
  7. 5G 之战让运营商备受冷落?! | 极客头条
  8. yacc c语言语法分析,编译原理实践--语法分析程序的自动生成工具YACC.PPT
  9. 通过 bitbang GPIO来实现i2c总线协议
  10. uniapp 运行到手机或模拟器
  11. Java的ASCII编码表
  12. JAVA自学-day16-List的子类、泛型、增强for循环、静态导入、可变参数
  13. 5G承载网络架构和技术方案白皮书(部分摘录-1)
  14. latex 大于等于_Latex使用时的小技巧
  15. 比word更适合编写方案文档的工具Latex
  16. XTU 1256 湘潭大学
  17. Exchange的常用的命令(更新中)
  18. 插值算法(一):各种插值方…
  19. root精灵无法root,Root精灵
  20. cocos creator 微信小游戏接口

热门文章

  1. Android笔记:Dialog显示图片
  2. 232电平和TTL电平
  3. 使用cordova + vue搭建混合app框架
  4. 多分类模型Accuracy, Precision, Recall和F1-score的超级无敌深入探讨
  5. 修改Tomcat的端口号方法
  6. 在《css禅意花园》中所学到的
  7. 根据刚刚,1分钟前,1小时前,几天前显示文章发布日期
  8. Oracle 循环插入数据
  9. 设置和获取中断向量,很清楚嗷
  10. GOPATH 与工作空间