在LCD上显示jpeg图像

  1. 功能描述
  2. 实践要点
    1. libjpeg
      1. libjpeg移植
    2. 解码流程&关键代码
  3. 附录

功能描述

  • 使用libjpeg库,在LCD上显示jpeg图像

实践要点

libjpeg

  • JPEG可以提供有损压缩,其压缩比可以达到其它传统压缩算法无法比拟的程度。
  • libjpeg是一个C语言函数库,包含了JPEG解码、编码和其它的JPEG功能实现。可以使用libjpeg库对.jpg或.jpeg压缩文件进行解压或者生成.jpg或.jpeg压缩文件。

libjpeg移植

  1. 下载libjpeg源码,下载地址:http://www.ijg.org/files/

  2. 编译源码,以v9b版本为例。

    tar -xvf jpegsrc.v9b.tar.gz
    cd jpeg-9b
    mkdir build
    ./configure --host=arm-linux-gnueabihf --prefix=yourpath/jpeg-9b/build
    make
    make install
    
  3. 移植libjpeg

    bin -> /usr/bin
    lib -> /usr/lib #不要破坏符号链接,复制的时候加入选项-d
    

解码流程&关键代码

  1. 创建jpeg解码对象

    struct jpeg_decompress_struct cinfo;	//以下两个重要的结构体数据,定义在<jpeglib.h>中。
    struct jpeg_error_mgr jerr;				//cinfo记录着jpeg数据的详细信息,也保存着解码之后输出数据的详细信息
                                            //jerr用于错误处理
    jpeg_create_decompress(&cinfo);
    
  2. 指定解码数据源

    jpegFile = fopen(filepath, "r");
    
    jpeg_stdio_src(&cinfo, jpegFile);
    
  3. 读取图像信息

    jpeg_read_header(&cinfo, TRUE);
    //cinfo.image_width 		jpeg图像宽度
    //cinfo.iamge_hegith		jpeg图像高度
    //cinfo.num_components		颜色通道数
    //cinfo.jpeg_color_space	jpeg图像的颜色空间
    
  4. 设置解码参数

    cinfo.out_color_space = JCS_RGB;
    cinfo.scale_num = 1;		//图像缩放操作,如要将输出图像设置为原图的1/2大小,则按左边设置。
    cinfo.scale_denom = 2;
    
  5. 开始解码

    jpeg_start_decompress(&cinfo);	//完成解压操作后,会将解压后的图像信息填充至cinfo结构中
    
  6. 读取解码后数据

    jpeg_read_scanlines(&cinfo, &buf, 1);
    
  7. 解码完毕

    jpeg_finish_decompress(&cinfo);
    
  8. 释放/销毁解码对象

    jpeg_destroy_decompress(&cinfo);
    

附录


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 sigma_poet@126.com

💰

×

Help us with donation