




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
jpeg图片解码显示丁建明华嵌教育教学目标了解libjpeg
libjpeg库是专门用于jpeg图片格式解压和压缩的库解压jpeg图片,并显示到LCD屏上jpeg介绍JPEG是JointPhotographicExpertsGroup(联合图像专家小组)的缩写。JPEG的压缩方式通常是破坏性资料压缩(lossycompression),意即在压缩过程中图像的品质会遭受到可见的破坏。称为有损压缩。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,支持24bit真彩色,也普遍应用于需要连续色调的图像。libjpeg简介libjpeg是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。这个库由独立JPEG工作组维护。最新版本号是6b,于1998年发布。在libjpeg中,图像数据是以扫描线的形式存放的。每一条扫描线由一行像素点构成,像素点沿着扫描线从左到右依次排列。对于彩色图像,每个分量由三个字节组成,因此这三个字节以R、G、B的顺序构成扫描线上的一个像素点。一个典型的扫描线形式如下:R,G,B,R,G,B,R,G,B,…通过libjpeg解压出来的图像数据也是以扫描线的形式存放的。jpeg解码显示流程初始化显示设备打开图像文件设置出错处理函数分配并初始化一个JPEG解压对象指定要解压缩的图像文件获取图像信息开始解压为解压后的扫描线上的所有像素点分配空间循环读取一行并显示到液晶屏上结束解码释放解码对象关闭文件解除显存映射,关闭显示设备文件jpeg解码显示流程图需要用到的头文件#include<stdio.h>#include<stdlib.h>#include<string.h>#include<fcntl.h>#include<sys/types.h>#include<linux/fb.h> //framebuffer头文件#include<sys/mman.h> //内存映射头文件#include<jpeglib.h> //libjpeg头文件#include<jerror.h> //libjpeg错误处理头文件jpeg解码显示具体流程1、初始化显示设备
具体查看framebuffer操作流程2、打开一个jpeg图像文件3、设置默认的出错信息注:在libjpeg库中,实现了默认错误处理函数,当错误发生时,比如如果内存不足等,则默认错误处理函数将会调用exit函数结束整个进程FILE*infile=fopen(“picture.jpeg”,“r”);structjpeg_error_mgrjerr;cinfo.err=jpeg_std_error(&jerr);jpeg解码显示具体流程4、分配并初始化一个JPEG解压对象
5、指定要解压缩的图像文件
6、获取图像信息,调用结束后cinfo结构体中已填充图片信息
7、开始解码structjpeg_decompress_structcinfo;jpeg_create_decompress(&cinfo);jpeg_stdio_src(&cinfo,infile);jpeg_read_header(&cinfo,TRUE);jpeg_start_decompress(&cinfo);jpeg解码显示具体流程structjpeg_decompress_structcinfo中所需要用到的成员参数:
cinfo.output_height :扫描线的总数 cinfo.output_width :图像输出的宽度
cinfo.output_components:每个像素的分量数也称字节数jpeg解码显示具体流程8、为解压后的扫描线上的所有像素点分配空间注:开始解压后往往需要为解压后的每一条扫描线上的所有像素点分配存储空间,这个空间的大小可以通过output_wight*output_componets确定。
char*buffer=(unsignedchar*)malloc(cinfo.output_width* cinfo.output_components);jpeg解码显示具体流程9、循环读取一行并显示到液晶屏上
对扫描线的读取是按照从上到下的顺序进行的,也就是说图像最上方的扫描线最先被jpeg_read_scanlines()读入存储空间中,紧接着是第二个扫描线,最后是图像底边的扫描线被读入存储空间中。inty=0;while(cinfo.output_scanline<cinfo.output_height){ //读取一行并显示 jpeg_read_scanlines(&cinfo,&buffer,1); //读取一行像素点 unsignedshortcolor; for(x=0;x<cinfo.output_width;x++){ color=RGB888toRGB565(buffer[x*3], buffer[x*3+1],buffer[x*3+2]); fb_pixel(x,y,color); //显示一个像素点
} y++;}jpeg解码显示流程RGB888转RGB565 如果所用的Framebuffer设备的颜色深度为16位,颜色格式为5-6-5格式——即R(红色)在16bit中占据高5位,G(绿色)在16bit中占据中间6位,B(蓝色)在16bit中占据低5位;而libjpeg解压出来的图像数据为24位RGB格式,因此必须进行转换。对于24位的RGB,每个字节表示一个颜色分量,因此转换的方式为:对于R字节,右移3位,对于G字节,右移2位,对于B字节,右移3位,然后将右移得到的值拼接起来,就得到了16位的颜色值unsignedshortRGB888toRGB565(unsignedcharred, unsignedchargreen,unsignedcharblue){unsignedshortB=(blue>>3)&0x001F;unsignedshortG=((green>>2)<<5)&0x07E0;unsignedshortR=((red>>3)<<11)&0xF800;return(unsignedshort)(R|G|B);}jpeg解码显示流程10、结束解码
11、释放解码对象12、释放为解压后的扫描线上的所有像素点分配空间
13、关闭文件jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);free(buffer);fclose(infile);jpeg解码显示流程14、解除显存映射,关闭显示设备文件
具体看framebuffer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民警打分具体管理办法
- 供水公司主业管理办法
- 法兰西国族认同研究:从“国族传奇”看历史演变
- 民国茶叶消费量与产量动态关系研究
- 内部湿度差异对硬化水泥浆体特性的影响研究
- 公共物品维护管理办法
- 变频器效率优化-洞察及研究
- 鞭毛状微生物阪崎肠杆菌的乳粉检测技术研究
- AI大模型在金融领域反欺诈中的应用研究与优化策略
- 安全生产事故应急预案范本2020年
- 北京市大兴区2025年初中学业水平考试地理真题(含答案)
- 第三代社保卡培训
- 办公室应聘题库及答案
- 2025年河北中考地理真题含答案
- 铁矿尾矿清运方案(3篇)
- 国开机考答案 管理学基础2025-06-27
- 国家开放大学《思想道德与法治》社会实践报告范文一
- 【9语安徽中考卷】2025年安徽省中考招生考试真题语文试卷(真题+答案)
- 2025年空气过滤器行业分析报告
- 同等学力人员申请硕士学位电子科学与技术学科综合水平全国统一考试大纲(第二版)
- (高清版)DG∕TJ 08-507-2018 高强混凝土抗压强度无损检测技术标准
评论
0/150
提交评论