基于Linux操作系统的嵌入式设备图像显示技术与实现

上传人:痛*** 文档编号:100855987 上传时间:2022-06-03 格式:DOC 页数:55 大小:3.21MB
收藏 版权申诉 举报 下载
基于Linux操作系统的嵌入式设备图像显示技术与实现_第1页
第1页 / 共55页
基于Linux操作系统的嵌入式设备图像显示技术与实现_第2页
第2页 / 共55页
基于Linux操作系统的嵌入式设备图像显示技术与实现_第3页
第3页 / 共55页
资源描述:

《基于Linux操作系统的嵌入式设备图像显示技术与实现》由会员分享,可在线阅读,更多相关《基于Linux操作系统的嵌入式设备图像显示技术与实现(55页珍藏版)》请在装配图网上搜索。

1、基于Linux操作系统的嵌入式设备图像显示技术及实现生产实习容摘要此次生产实习是在学习完C语言程序设计、操作系统、算法分析、数据结构、计算机网络、编译原理、嵌入式设计基础等课程后,为进一步学习后继专业课程前必须完成的一项实践教学环节。实习过程以LINUX下图像显示的方法和过程为接入点,需要在进行程序的交叉编译后,在以LINUX为核心的嵌入式设备上进行图形显示,研究图片在嵌入式设备下显示的方法和应用,从而了解了嵌入式图形显示在各种领域的应用。掌握和嵌入式设计有关的专业基础知识和程序设计的基本方法;通过本课程的学习,使学生选择嵌入式应用程序开发嵌入式通用图形库设计与实现进行实训,培养学生具有获取知

2、识、提出问题、分析问题和解决问题的能力及创新的精神。三、教学容与要求任务:嵌入式通用图形库设计与实现1.教学容l 计算机图形学的基本原理;l ARM软件开发实验环境的搭建;l ARM硬件开发实验环境的搭建;l Frame Buffer技术;l 开源代码的修改和编译;l BMP、JPEG、GIF、PNG等图形格式及理论知识;l Linux动态库、静态库的编译方法及调用方法;l Linux下图形程序库的编写;l 交叉编译技术;l 交叉调试方法;l 项目的实施;2.重点难点重点:l ARM软件开发实验环境的搭建;l ARM硬件开发实验环境的搭建;l 开源代码的修改和编译;l Linux动态库、静态库

3、的编译方法及调用方法;l 交叉编译、调试技术。难点:l Linux下图形程序库的编写;l 交叉编译、调试技术。3.基本要求l 掌握ARM软件开发实验环境的搭建;l 掌握ARM硬件开发实验环境的搭建;l 掌握开源代码的修改和编译;l 了解Linux动态库、静态库的编译方法及调用方法;l 了解交叉编译、调试技术。l 学生根据实训大概要求完成项目,撰写生产实习报告,代码行不少于8000行。l 教师根据学生完成的任务情况及撰写的实习报告评定学生本次任务的成绩百分制。实验操作环境:linux操作系统;嵌入式设备图形显示:FRAMEBUFFER程序语言:linux下的C52 / 55Based On Th

4、e Linux Embedded Operationg System Device Image Display Technique And RealizationAbstract:Withtherapiddevelopmentofelectronictechnology,theembeddedmicrocontrollertechnologytothefieldofmodernindustrialcontrolhasbroughtanewtechnologicalrevolution.ThisarticledescribestheLINUXtext-modeimagedisplayJPEGan

5、dBMPformatimagesofthemethodsandprocesses.CompressionalgorithmsJPEGandBMPimageloadingmorequickly,moresupportforavarietyoflow-endembeddeddevices,imagedisplay.Theprogramhasbeencross-compiledembeddeddevicesbasedonSamsungS3C6410CPULINUXcoreofgraphicaldisplaytechnology.Methodsandapplicationsofthepicturesd

6、isplayedintheembeddeddevice.Finally,theembeddedgraphicsdisplayapplicationsinvariousfields. Key Words : Linux OS;Embedded;Graphic display;Framebuffer目录引言11绪论11.1研究背景11.2图像处理的现状及本文的意义22基本技术和芯片简介22.1嵌入式系统简介22.2 linux简介52.3ARM简介52.4开发板基本介绍53图像格式解析63.1 BMP格式图像73.2 JPEG格式图像123.4GIF格式图像123.4PNG格式图像124 在PC下

7、基于FRAMEBUFFER的图像显示224.1FRAMEBUFFER原理与结构224.2基于 FRAMEBUFFER的图像显示实现235 在开发板下基于FRAMEBUFFER图像显示455.1 环境搭建225.2静态与动态库455.3BMP交叉编译455.4JPEG交叉编译455.5GIF交叉编译455.6PNG交叉编译455.7交叉编译后程序在开发板上图像显示测试结果47结论48致48参考文献49从自然界获取信息感受外部世界,是通过听觉、视觉、触觉、嗅觉、味觉等来完成。大部分情况下人们都视觉的感知度要高于其他感觉,而视觉所看到的画面都是有图片组成的。而图像是人类视觉对图片快速反应的一个。图片

8、快速的形成了像,所以说图像是图和像两者的结合。随着嵌人式技术的迅猛发展,嵌入式技术已经成为一个万众瞩目的焦点,目前已经广泛应用于信息家电、网络、工业控制、航空航天等领域。而Linux开源性、可定制性、可移植性等优点,及近年来在国外的快速发展,使得其在嵌入式行业受到青睐。由于嵌入式硬件性能的不断提升,使得在嵌入式设备上运行各种图像成为可能。LINUX下FRAMEBUFFER是 控制台下的一个通用的图形接口,它拥有良好的平台无关性,可以支持绝大多数的硬件,因而得到愈来愈多厂家的支持,一些流行的图形库如 QT、GTK 便基于FRAMEBUFFER的。它的接口非常简单,通过它可以十分方便地构建一个图形

9、系统。QT、GTK是面向对象开发图形界面软件使用的,有时不太适合部分要求低的嵌入式设备,而本文所重新编写的图形库,更加方便各种低要求的嵌入式设备使用,不需要加载过多程序,就可以在设备上显示JPEG,BMP格式的图片。本文基于LINUX下FRAMEBUFFER驱动,开发出一个用于ARM平台的嵌入式设备下图像显示的程序。具有高稳定性和高性能、移植性好等优点。1绪论1.1研究背景随着社会不断进步,技术不断更新,一轮又一轮的技术革命冲击着市场。从最初的大块头到现在的微乎其微,电子产品以一种迅猛的态势发展前进。随着社会生活不断提高,GDP的不断增长,人们在日常生活中对电子产品的依赖越来越强烈,手机几乎每

10、人一部,电脑几乎人人都有。电子相册,MP3/MP4更不在话下。工业上已经过了人工控制的年代,处处都是大型机械数字化管理,工厂对人工的需求在下降,对技术的需求在上升。操作简便,直观明了成了工厂的新一轮技术发展趋势。几乎所有这些地方都用到了嵌入式技术,高速的嵌入式发展进度可以让设备越来越精致,越来越便于人们的携带,越来越让人容易控制和实现某些特定的功能。嵌入式系统就是以应用为中心,以计算机技术为基础,软硬件可裁减,适合应用系统对功能、可靠性、成本、体积和功耗要求的专用的计算机系统。嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合的产物。这一点就决定了它必然是一个技术密

11、集、资金密集、高度分散、不断创新的知识集成系统而在所有这些设备上,最共同的地方就是都有视窗,各种数据都是通过视窗的显示和使用人员进行交互。而数据也大多都是通过图片的方式进行显示。本文将会研究到这里边最基本最实用的功能,嵌入式设备下图像显示。1.2图像处理的现状及本文的意义伴随各种格式图像标准的颁布。国外许多公司及个人开始了对嵌入式编解码的研究和实现工作。大致可分为以下几类:图像处理的集成板卡、基于不同处理器平台的实现、专用的图像处理Ic芯片、基于可编程逻辑器件的图像编解码处理芯片的设计与实现。随着ARM技术的不断发展,ARM处理器的速度在不断提高,其对数据处理的能力也越来越强,价格也在不断降低

12、。ARM处理器具有性能高、成本低和能耗省的特点。适用于多种领域。本文基于ARM处理器设计了对成本要求相对较低,而相对基于DSP实现的和专门解码芯片的功能较强大的图像处理和显示的嵌入式程序。由于ARM芯片强大的控制能力和高速的数据处理能力。使得ARM在诸多嵌入式图像编解码实现方法中更具有优势。所以研究BMP,JPEG格式图片压缩和解压缩并现在在ARM上,具有很重要的价值和意义。2基本技术和芯片简介2.1嵌入式系统简介2.1.1嵌入式系统概念 嵌入式系统本身是一个相对模糊的定义。目前嵌入式系统已经渗透到我们生活中的每个角落,工业、服务业、消费电子,而恰恰由于这种围的扩大,使得嵌入式系统更加难于明确

13、定义根据IEEE国际电机工程师协会的定义,嵌入式系统是控制、监视或者辅助装置、机器和设备运行的装置原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants。这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。 嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。所以,介入嵌入式系统行业,必须有一个正确的定

14、位。例如Palm之所以在PDA领域占有70以上的市场,就是因为其立足于个人电子消费品,着重发展图形界面和多任务管理。 嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。所以,如果能建立相对通用的软硬件基础,然后在其上开发出适应各种需要的系统,是一个比较好的发展模式。目前的嵌入式系统的核心往往是一个只有几K到几十K微核,需要根据实际的使用进行功能扩展或者裁减,但是由于微核的存在,使得这种扩展能够非常顺利的进行。 一般而言,嵌入式系统的构架可以分成四个部分:处理器、存储器、输入输出I/O和软件由于多数嵌入式设备的应用软件和操作系统都是紧密结合的,在这里我们对

15、其不加区分,这也是嵌入式系统和Windows系统的最大区别。2.1.2嵌入式系统的特点嵌入式系统的几个重要特征: 系统核小。由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以核较之传统的操作系统要小得多。比如Enea公司的OSE分布式系统,核只有5K,而Windows的核?简直没有可比性。 专用性强。嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的升级是完全两个概念。

16、 系统精简。嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。 高实时性的系统软件是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。 嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。嵌入式系统的应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOSRealTime Operating System开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。 嵌入式系

17、统开发需要开发工具和环境。由于其本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。目前嵌入式系统除了部分为32 位处理器外,大量存在的是8 位和16 位的嵌入式微控制器 ,嵌入式系统是计算机应用的另一种形态,正如前所述它与通用计算机应用不同:嵌入式计算机是以嵌入式系统的形式隐藏在各种装置、产品和系统之中的一种软硬件高度专业化的特定计算机系统

18、。国常见的嵌入式系统有7种:Linux、uClinux、WinCE、PalmOS、Symbian、uCOS-II、VxWorks。2.1.3嵌入式系统开发环境工具由于其本身不具备自主开发能力,即使设计完成以后,用户通常也是不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。如图所示。 嵌入式系统开发需要开发工具和环境2.1.4本次嵌入式程序开发环境利用虚拟机进行系统安装使用,虚拟机必须安装Vmw

19、are Tool。PC机操作系统为:Linux Fedora 7 KDE基于Red Hat 6.0.9,核版本为:Linux 2.6.21,并启动FRAMEBUFFER。PC端开发工具为VIM,GCC,LIBTOOL。交叉编译工具为:cross-4.2.2-eabi。开发板环境为:飞凌OK-6410开发板开发板参数:CPU:ARM11,RAM=256MB,ROM=2GB,核心芯片三星S3C6410。2.2 ARM简介ARM是Advanced RISC Machines高级精简指令系统处理器的缩写,是ARM公司提供的一种微处理器知识产权IP核。设计了大量高性能、廉价、耗能低的32位RISC处理器

20、、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等它的典型开发版是S3C2410。ARM核的数个系列ARM7、ARM9、ARM9E、ARM10E、ARM11、SecurCore、Xscale、StrongARM,各自满足不同应用领域的需求,无孔不入的渗入嵌入式系统各个角落的应用。这是一个ARM的时代!本次我选择基于ARM11ARM1176JZF-S核的ARM处理器。ARM9处理器采用5级流水线,指令执行效率较ARM7高,而且带有MMU功能,这是与ARM7的重要区别。ARM11增加了向量浮点单元。同时,该系列的处理器支持

21、指令Cache和数据Cache。因而具有更高的数据处理能力主要应用在MP3播放器,手持终端,数字照相机等。ARM的应用已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场。基于ARM 技术的微处理器应用约占据了32位RISC 微处理器75以上的市场份额。揭开你的手机、MP3、 PDA,里面多半藏着一个基于ARM的微处理器! 2.3 OK6410开发板基本介绍与ARM9的5级流水线相比,ARM11拥有一条具有独立的load-store和算术流水的8级流水线,在同样工艺下,ARM11处理器的性能与ARM9相比大约提高了40%。ARM11执行ARMv6架构的指令,ARMv6指令

22、包含了针对媒体处理的单指令流多数据流SIMD扩展,采用特殊的设计,以改善视频处理性能。为了能够进行快速浮点运算,ARM11增加了向量浮点单元。所有这些结构上的提高,都是ARM9处理器不可比拟的。ARM11为便携式和无线应用,提供了从未有过的高超性能,并且使我们主要关心的成本和功耗减到最小。ARM11的微架构保证了系统性能可以从基本的350-500MHz围扩展到最终的1GHz以上。OK6410开发板图1-1基于三星公司最新的ARM11处理器S3C6410,拥有强大的部资源和视频处理能力,可稳定运行在667MHz主频以上,支持Mobile DDR和多种NAND Flash。OK6410开发板上集成

23、了多种高端接口,如复合视频信号、摄像头、USB、SD卡、液晶屏、以太网,并配备温度传感器和红外接收头等。这些接口可作为应用参考帮助用户实现高端产品级设计。OK6410开发板采用核心板+底板结构,核心板尺寸规格为5CM6CM,底板尺寸为10.5CM14CM,核心板与底板之间采用4组高质量进口连接器镍金工艺,接触好、抗氧化,共计320个引脚804,方便客户进行二次开发,进行各种形式的扩展应用。OK6410的软件系统目前支持WinCE 6.0、 LINUX2.6.28、Android2.1以及uC/OS-II,提供标准板级支持包BSP并开放源码,其中包含了所有接口的驱动程序,客户可以直接加载使用。另

24、外,该板可连接飞凌公司与之相配套使用的串口扩展板、WIFI模块、摄像头模块等。 图2-13图像格式解析3.1 BMP格式图像BMP格式BMP是英文Bitmap位图的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。这种格式的特点是包含的图像信息较丰富,乎不进行压缩,但由此导致了它与生俱生来的缺点-占用磁盘空间过大。位图文件可看成由4个部分组成:位图文件头、位图信息头、颜色表和位图数据。位图文件头位图文件头包含有关于文件类型、文件大小、存放位置等信

25、息,在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义:typedef structint bfType;/bfType,这里恒定等于&H4D42,ASCII字符BMlong bfSize;/文件大小,以4字节为单位int bfReserve1;/备用int bfReserve2;/备用long bfoffBits;/数据区在文件中的位置偏移量BITMAPFILEHEADER;/文件头结构体,14字节bmp文件以BITMAPFILEHEADER结构体开始,BITMAPFILEHEADER的第1个属性是bfType,这里恒定等于&H4D42。由于存中的数据排

26、列高位在左,低位在右,所以存中从左往右看就显示成,所以在UltraEdit中头两个 字节显示为就是这样形成的,以后的数据都是这个特点,不再作重复说明。 BITMAPFILEHEADER的第2个属性是bfSize,表示整个bmp文件的大小,这里等于&H000004F8=1272字节。BITMAPFILEHEADER的第3个、第4个属性分别是bfReserved1、bfReserved2,这里是2个保留属性,都为0,这里等于&H0000、&H0000。 BITMAPFILEHEADER的第5个属性是bfOffBits,表示DIB数据区在bmp文件中的位置偏移量,这里等于&H00000076=118

27、,表示数据区从文件开始往后数的118字节开始。 2位图信息头typedef structlong bitSize;/位图信息头大小long biWidth;/图象宽度,像素单位long biHeight;/图象高度,像素单位int biPlanes;/位平面树=1int biBitCount;/单位像素的位数,表示bmp图片的颜色位数,即24位图、32位图long biCompression;/图片的压缩属性,bmp图片是不压缩的,等于0long biSizeImage;表示bmp图片数据区的大小,当上一个属性biCompression等于0时,这里的值可以省略不填long biXPlosPe

28、rMeter;/水平分辨率,可省略long biYPlosPerMeter;/垂直分辨率,可省略long biClrUsed;/表示使用了多少个颜色索引表,一般biBitCount属性小于16才会用到,等于0时表示有2biBitCount个颜色索引表long biClrImportant;/表示有多少个重要的颜色,等于0时表示所有颜色都很重要BITMAPINFOHEADER;/位图信息头,40字节BITMAPINFO段由两部分组成:BITMAPINFOHEADER结构体和RGBQUAD结构 体。其中RGBQUAD结构体表示图片的颜色信息,有些时候可以省略,一般的24位图片和32位图片都不带RG

29、BQUAD结构体,因为DIB数据区直接表 示的RGB值,一般4位图片和8位图片才带有RGBQUAD结构体。一个bmp文件中有没有RGBQUAD结构体,可以根据前面BITMAPFILEHEADER结构体的第5个属性bfOffBits来判 断因为BITMAPINFOHEADER结构体长度为40bit,如果BITMAPINFOHEADER结构体结束后还未到DIB数据区的偏移量,就说 明接下来的数据是RGBQUAD结构体部分。这里特别对biBitCount进行详细介绍biBitCount=1 表示位图最多有两种颜色,缺省情况下是黑色和白色,你也可以自己定义这两种颜色。图像信息头装调色板中将有两个调色板

30、项,称为索引0和索引1。图象数据阵列中的每一位表示一个象素。如果一个位是0,显示时就使用索引0的RGB值,如果位是1,则使用索引1的RGB值。 biBitCount=4 表示位图最多有16种颜色。每个象素用4位表示,并用这4位作为彩色表的表项来查找该象素的颜色。 biBitCount=8 表示位图最多有256种颜色。每个象素用8位表示,并用这8位作为彩色表的表项来查找该象素的颜色。 biBitCount=16 表示位图最多有216种颜色。每个色素用16位2个字节表示。这种格式叫作高彩色,或叫增强型16位色,或64K色。它的情况比较复杂,当biCompression成员的值是BI_RGB时,它没

31、有调色板。16位中,最低的5位表示蓝色分量,中间的5位表示绿色分量,高的5位表示红色分量,一共占用了15位,最高的一位保留,设为0。这种格式也被称作555 16位位图。如果biCompression成员的值是BI_BITFIELDS,那么情况就复杂了,首先是原来调色板的位置被三个DWORD变量占据,称为红、绿、蓝掩码。分别用于描述红、绿、蓝分量在16位中所占的位置。在Windows 95或98中,系统可接受两种格式的位域:555和565,在555格式下,红、绿、蓝的掩码分别是:07C00、003E0、0001F,而在565格式下,它们则分别为:0xF800、007E0、0001F。你在读取一个

32、像素之后,可以分别用掩码与上像素值,从而提取出想要的颜色分量。在NT系统中,则没有格式限制,只不过要求掩码之间不能有重叠。biBitCount=24 表示位图最多有224种颜色。这种位图没有调色板bmiColors成员尺寸为0,在位数组中,每3个字节代表一个象素,分别对应于颜色R、G、B。 biBitCount=32 表示位图最多有232种颜色。这种位图的结构与16位位图结构非常类似,当biCompression成员的值是BI_RGB时,它也没有调色板,32位中有24位用于存放RGB值,顺序是:最高位保留,红8位、绿8位、蓝8位。如果 biCompression成员的值是BI_BITFIELD

33、S时,原来调色板的位置将被三个DWORD变量占据,成为红、绿、蓝掩码,分别用于描述红、绿、蓝分量在32位中所占的位置。图象数据压缩 BI_RLE8:每个象素为8比特的RLE压缩编码,可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式可在同一幅图中的任何地方使用。 编码方式:由2个字节组成,第一个字节指定使用相同颜色的象素数目,第二个字节指定使用的颜色索引。此外,这个字节对中的第一个字节可设置为0,联合使用第二个字节的值表示: 第二个字节的值为0:行的结束。 第二个字节的值为1:图象结束。第二个字节的值为2:其后的两个字节表示下一个象素从当前开始的水平和垂直位置的偏移量。 绝对方式:第一个

34、字节设置为0,而第二个字节设置为0030xFF之间的一个值。在这种方式中,第二个字节表示跟在这个字节后面的字节数,每个字节包含单个象素的颜色索引。压缩数据格式需要字边界对齐 BI_RLE4:每个象素为4比特的RLE压缩编码,同样也可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式也可在同一幅图中的任何地方使用。这两种方式是: 编码方式:由2个字节组成,第一个字节指定象素数目,第二个字节包含两种颜色索引,一个在高4位,另一个在低4位。第一个象素使用高4位的颜色索引,第二个使用低4位的颜色索引,第3个使用高4位的颜色索引,依此类推。 绝对方式:这个字节对中的第一个字节设置为0,第二个字节包含

35、有颜色索引数,其后续字节包含有颜色索引,颜色索引存放在该字节的高、低4位中,一个颜色索引对应一个象素。此外,BI_RLE4也同样联合使用第二个字节中的值表示: 第二个字节的值为0:行的结束。第二个字节的值为1:图象结束。 第二个字节的值为2:其后的两个字节表示下一个象素从当前开始的水平和垂直位置的偏移量。压缩算法如下压缩源图像文件PackYuan/*sf和df分别表示指向源文件和目标文件的指针*/sf=fopen; df=fopen;fseek;/*定位到数据部分,number表示偏移量*/temp=第一个像素的颜色值;do ch=fread;/*处理高字部分*/ch1=高字部分的颜色值;if

36、 count+;else /*改进部分即是下面这个if语句*/if c1=temp;ic1=count; tag=TRUE; else c2=temp;ic2=count;c1=c14;c1=c1|c2;/*两色存到一个字节中*/fputc;fputc;fputc;temp=ch1;count=1;tag=FALSE; /*处理低字部分,这部分处理和高字部分基本相同,故略去*/ch1=低字部分的颜色值;while!feoffclose; fclose; 压缩已压缩过的图像文件压缩算法简述如下:PackYa/*sf和df分别表示指向源文件和目标文件的指针*/sf=fopen; df=fopen;

37、fseek;/*定位到数据部分,number表示偏移量*/do /*从待压缩的文件中读出一组数据*/ count1=fread; color1=fread;count2=fread; color2=fread;/*利用color1的高四位,把color1和color2合成一个字节*/color1=color14; color1=color1|color2;/*写入目标文件*/fputc; fputc;fputc;while!feof /*若文件未结束,转到do语句*/fclose; fclose; 颜色表 颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定

38、义一种颜色。RGBQUAD结构的定义如下: typedef struct tagRGBQUAD BYTErgbBlue;/ 蓝色的亮度BYTErgbGreen; / 绿色的亮度BYTErgbRed; / 红色的亮度BYTErgbReserved;/ 保留,必须为0 RGBQUAD;RGBQUAD结构体由4个字节型数据组成,所以一 个RGBQUAD结构体只占用4字节空间,从左到右每个字节依次表示。举例的这个图片我数了数总共有16个RGBQUAD结 构体,由于该图片是4位图,24正好等于16,所以它把16种颜色全部都枚举出来了,这些颜色就是一个颜色索引表。颜色索引表编号从0开始,总共16个 颜色,

39、所以编号为0-15。位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数: 当biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当biBitCount=8时,1个像素占1个字节;当biBitCount=24时,1个像素占3个字节;Windows规定一个扫描行所占的字节数必须是4的倍数,不足的以0填充,一个扫描行所占的字节数计算方法:DataSizePerLine= /8; / 一个扫描行所占的字节数DataSizePerLine= DataSizePerLine/4*4; /

40、字节数必须是4的倍数位图数据的大小:DataSize= DataSizePerLine* biHeight;函数名称函数功能参数返回值Main程序主程序argcchar *argv0函数中参数个数存放参数的数组memset初始化函数void *sint chsize_t n指针S将s中前n个字节替换为ch并返回scetc_renderbmp图片数据放入开辟的空间IMAGEHEADER*img./logo24.bmp空间图片的路径draw_bmp将图片存储的空间放入bufferreaderIMAGEHEADER*imgInt XInt Y图片存储的空间图片参照点free释放缓存空间所释放空间的指

41、针fb_open打开结构体空间PFBDEV pFbdevfb_close关闭结构体空间PFBDEV pFbdevfb_memcpy调用memcpy;void *addrvoid *color,size_t lenmemcpy从源src所指的存地址的起始位置开始拷贝n个字节到目标dest所指的存地址的起始位置中void *dest,const void *srcint nstrcpy把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间char *destchar *srcsize_tread_image_buf把Imagebuffer中的数据放入dest中img_buff

42、er*img_buf, void *destsize_t sizeseek_image_buf寻找image bufferimg_buffer *img_buf, ,size_t offsetint whencecalc_pitchint bpp, int width,int height,unsigned int *pitchdecode_RLE8一种解码方式实现函数BYTE *buf, img_buffer*img_bufdecode_RLE4一种解码方式实现函数read_bmp存放图片数据MAGEHEADER*image, , void *buffersize_t sizecetc_re

43、nderbmp存映射,把buffer写到图像数组calc_pitch计算位深image-bpp, image-width, image-depth, &image-bytewidthdraw_bmp函数流程Draw_bmpMemcpyMemsetFb_open Fb_memoryStrcyMmapread_bmp函数流程read_bmpinit_image_buf Seek_image_bufread_image_buf Calc_ptichMallocFreedecode_RLE8 memcpyeof_image_buf getc_image_buf Main函数流程Draw_bmpcetc

44、_renderbmpMemsetMainfree3.2 JPEG格式图像1 文件的基本结构JPEG是常见的一种图像格式,它由联合照片专家组Joint Photographic Experts Group开发,JPEG文件的扩展名为.jpg或.jpeg,其压缩技术十分先进,我们最高可以把1.37MB的BMP位图文件压缩至20.3KB但是它用有损压缩方式去除冗余的图像和彩色数据,虽然一个图片经过转化为JPEG图像后,一些数据会丢失,但是,人眼是很不容易分辨出来这种差别的。也就是说,JPEG图像存储格式既满足了人眼对色彩和分辨率的要求,又适当的去除了图像中很难被人眼所分辨出的色彩,在图像的清晰与大小

45、中JPEG找到了一个很好的平衡点。获取得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最的磁盘空间得到较好的图像质量虽然图像转化为JPEG格式会减小很多,但是并不是文件就变得简单了,相反,JPEG文件的格式是比较复杂的。不经过认真地分析,是不容易弄懂它的。以下是其各个部分的功能及于存的位置组成部分编号起始位置字节号字段简写字段功能一FFD8SOI图像开始二FFE0APP0应用程序定义三FFE1APP1存放应用程序FFE2APP2FFE3APP3FFE4APP4FFE5APP5FFE6APP6FFE7APP7FFE8APP8FFE9APP9FFEAAPP10FFEBAPP11F

46、FECAPP12FFEDAPP13FFEEAPP14FFEFAPP15四FFDBDQT量化表定义五FFC0SOF帧图像开始六FFC4DHT霍夫曼表定义七FFDASOS扫描开始 八FFD9EOI图像结束各个部分分解PP0组成编号具体信息1APP0长度2标识符3版本号4X和Y的密度单位5X方向像素密度6Y方向像素密度7缩略图水平像素数目8缩略图垂直像素数目9缩略图RGB位图,由前面的数值决定,取值3n,n为缩略图总APPn组成编号具体信息1、APPn长度2、应用细节信息DQT组成编号具体信息1量化表长度2量化表数目3量化表SOF0,组成编号具体信息1帧开始长度2精度,每个颜色分量每个像素的位数3图

47、像高度4图像宽度5颜色分量数6对每个颜色分量包括:ID、垂直方向的样本因子、水平方向的样本因子 、量化表号DHT组成编号具体信息1、霍夫曼表的长度2、类型、AC或者DC3、索引4、位表5、值表SOS组成编号具体信息1扫描开始长度2颜色分量数 包括:ID、交流系数表号、直流系数表号3每个颜色分量4压缩图像数据10JPEG压缩解码器对压缩的图像数据可以通过解码过程,获得解压缩后重构的图像数据。解码的过程则是编码的逆过程。 11 JPEG压缩的具体实现首先要编写下面函数:int writejpeg;filename是图像文件名,img是原始图像数据,width ,height是图像的宽度和高度,qu

48、ality确定图像的压缩质量,gray确定图像的色彩。部分代码:jcfgimagewidth=width;jcfgimage_height=height;jcfginputcomponents=gray?l:3;jcfgin_color_space=gray?JCSFRAYSCALE:JCSRGB;jpegsetdefaults;jpeg_stdiodest;jpeg startcompress;line_length=gray?width:width十3;line=img;fori=0,i;jpeg_write_scanlines;jpeg_finish_compress;jpeg dest

49、roy_compress;本程序可将原始数据压缩为JPG或BMP格式的图像文件。概述:GIF图象是基于颜色列表的存储的数据是该点的颜色对应于颜色列表的索引值,最多只支持8位256色。GIF文件部分成许多存储块,用来存储多幅图象或者是决定图象表现行为的控制块,用以实现动画和交互式应用。GIF文件还通过LZW压缩算法压缩图象数据来减少图象尺寸。3.3 GIF格式图像GIF文件存储结构GIF文件部是按块划分的,包括控制块 Control Block 和数据块 Data Sub-blocks 两种。控制块是控制数据块行为的,根据不同的控制块包含一些不同的控制参数;数据块只包含一些8-bit的字符流,由

50、它前面的控制块来决定它的功能,每个数据块大小从0到255个字节,数据块的第一个字节指出这个数据块大小字节数,计算数据块的大小时不包括这个字节,所以一个空的数据块有一个字节,那就是数据块的大小0x00。一个GIF文件的结构可分为文件头、GIF数据流和文件终结器三个部分。文件头包含GIF文件署名和版本号;GIF数据流由控制标识符、图象块和其他的一些扩展块组成;文件终结器只有一个值为0x3B的字符;表示文件结束。GIF分为静态GIF和动画GIF两种,扩展名为.gif,是一种压缩位图格式,支持透明背景图像,适用于多种操作系统体型很小,网上很多小动画都是GIF格式。其实GIF是将多幅图像保存为一个图像文

51、件,从而形成动画,所以归根到底GIF仍然是图片文件格式。但GIF只能显示256色。和jpg格式一样,这是一种在网络上非常流行的图形文件格式。3.4 PNG格式图像PNG图像 概述:PNG格式图片因其高保真性、透明性及文件体积较小等特性,被广泛应用于网页设计、平面设计中。网络通讯中因受带宽制约,在保证图片清晰、逼真的前提下,网页中不可能大围的使用文件较大的bmp、jpg格式文件,gif格式文件虽然文件较小,但其颜色失色严重,不尽人意,所以PNG格式文件自诞生之日起就大行其道。文件结构由一个8字节的PNG文件署名PNG file signature域和按照特定结构组织的3个以上的数据块chunk组

52、成。PNG文件结构PNG定义了两种类型的数据块,一种是称为关键数据块critical chunk,这是标准的数据块,另一种叫做辅助数据块ancillary chunks,这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规没有要求PNG编译码器对可选数据块进行编码和译码,但规提倡支持可选数据块。对于一个PNG文件来说,其文件头总是由位固定的字节来描述的:十进制数137 80 78 71 13 10 26 10十六进制数89 50 4E 47 0D 0A1A0A其中第一个字节0x89超出了ASCII字符的围,这是

53、为了避免某些软件将PNG文件当做文本文件来处理。文件中剩余的部分由3个以上的PNG的数据块Chunk按照特定的顺序组成,因此,一个标准的PNG文件结构应该如下:PNG文件标志PNG数据块PNG数据块数据块结构关键数据块关键数据块中的4个标准数据块是:文件头数据块,调色板数据块,图像数据块,图像结束数据。辅助数据块PNG文件格式规制定的10个辅助数据块是: 背景颜色数据块bKGDbackground color。 基色和白色度数据块cHRMprimary chromaticities and white point。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。 图像数据块gAMA

54、image gamma。 图像直方图数据块hISTimage histogram。 物理像素尺寸数据块pHYsphysical pixel dimensions。 样本有效位数据块sBITsignificant bits。 文本信息数据块tEXttextual data。 图像最后修改时间数据块tIME image last-modification time。 图像透明数据块tRNS transparency。 压缩文本数据块zTXt compressed textual data。3,数据块摘要关键数据块、辅助数据块和专用公共数据块PNG文件中,每个数据块由4个部分组成,如下:名称 字节数 说明 Length 4字节 指定数据块中数据域的长度,其长度不超过字节 Chunk Type Code 4字节 数据块类型码由ASCII字母组成 Chunk Data 可变长度 存储按照Chunk Type Code指定的

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!