功能描述
- 使用libjpeg库,在LCD上显示jpeg图像
实践要点
libjpeg
- JPEG可以提供有损压缩,其压缩比可以达到其它传统压缩算法无法比拟的程度。
- libjpeg是一个C语言函数库,包含了JPEG解码、编码和其它的JPEG功能实现。可以使用libjpeg库对.jpg或.jpeg压缩文件进行解压或者生成.jpg或.jpeg压缩文件。
libjpeg移植
-
下载libjpeg源码,下载地址:http://www.ijg.org/files/
-
编译源码,以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
-
移植libjpeg
bin -> /usr/bin lib -> /usr/lib #不要破坏符号链接,复制的时候加入选项-d
解码流程&关键代码
-
创建jpeg解码对象
struct jpeg_decompress_struct cinfo; //以下两个重要的结构体数据,定义在
中。 struct jpeg_error_mgr jerr; //cinfo记录着jpeg数据的详细信息,也保存着解码之后输出数据的详细信息 //jerr用于错误处理 jpeg_create_decompress(&cinfo); -
指定解码数据源
jpegFile = fopen(filepath, "r"); jpeg_stdio_src(&cinfo, jpegFile);
-
读取图像信息
jpeg_read_header(&cinfo, TRUE); //cinfo.image_width jpeg图像宽度 //cinfo.iamge_hegith jpeg图像高度 //cinfo.num_components 颜色通道数 //cinfo.jpeg_color_space jpeg图像的颜色空间
-
设置解码参数
cinfo.out_color_space = JCS_RGB; cinfo.scale_num = 1; //图像缩放操作,如要将输出图像设置为原图的1/2大小,则按左边设置。 cinfo.scale_denom = 2;
-
开始解码
jpeg_start_decompress(&cinfo); //完成解压操作后,会将解压后的图像信息填充至cinfo结构中
-
读取解码后数据
jpeg_read_scanlines(&cinfo, &buf, 1);
-
解码完毕
jpeg_finish_decompress(&cinfo);
-
释放/销毁解码对象
jpeg_destroy_decompress(&cinfo);
附录
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
SigmaPoet
本文地址: [正点原子I.MX6U ALPHA V2.2开发板]——在LCD上显示jpeg图像
本文地址: [正点原子I.MX6U ALPHA V2.2开发板]——在LCD上显示jpeg图像