




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
防灾科技学院计算机科学与技术专业实习报告书 2011-2012 学年 第 三 学期 专 业 计算机科学与技术 系 别 灾害信息工程系 报告题目 嵌入式通用图形库设计与实现 报告人 李文辉 班 级 0950422 指导教师 吴鹏 带队教师 吴鹏 实习时间 2011.7.2-7.21 实习地点 4#30 基于Linux操作系统的嵌入式设备图像显示技术及实现报告人:李文辉指导教师:吴鹏生产实习内容摘要 此次生产实习是在学习完C语言程序设计、操作系统、算法分析、数据结构、计算机网络、编译原理、嵌入式设计基础等课程后,为进一步学习后继专业课程前必须完成的一项实践教学环节。实习过程以LINUX下图像显示的方法和过程为接入点,需要在进行程序的交叉编译后,在以LINUX为核心的嵌入式设备上进行图形显示,研究图片在嵌入式设备下显示的方法和应用,从而了解了嵌入式图形显示在各种领域的应用。掌握和嵌入式设计有关的专业基础知识和程序设计的基本方法;通过本课程的学习,使学生选择嵌入式应用程序开发(嵌入式通用图形库设计与实现)进行实训,培养学生具有获取知识、提出问题、分析问题和解决问题的能力及创新的精神。三、教学内容与要求任务:嵌入式通用图形库设计与实现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动态库、静态库的编译方法及调用方法;l 交叉编译、调试技术。难点:l Linux下图形程序库的编写;l 交叉编译、调试技术。3.基本要求l 掌握ARM软件开发实验环境的搭建;l 掌握ARM硬件开发实验环境的搭建;l 掌握开源代码的修改和编译;l 了解Linux动态库、静态库的编译方法及调用方法;l 了解交叉编译、调试技术。l 学生根据实训大概要求完成项目,撰写生产实习报告,代码行不少于8000行。l 教师根据学生完成的任务情况及撰写的实习报告评定学生本次任务的成绩(百分制)。实验操作环境:linux操作系统;嵌入式设备图形显示:FRAMEBUFFER程序语言:linux下的CBased On The Linux Embedded Operationg System Device Image Display Technique And Realization Author: WEI Jia-jun Instructor:YANG Qiu-geAbstract:Withtherapiddevelopmentofelectronictechnology,theembeddedmicrocontrollertechnologytothefieldofmodernindustrialcontrolhasbroughtanewtechnologicalrevolution.ThisarticledescribestheLINUXtext-modeimagedisplayJPEGandBMPformatimagesofthemethodsandprocesses.CompressionalgorithmsJPEGandBMPimageloadingmorequickly,moresupportforavarietyoflow-endembeddeddevices,imagedisplay.Theprogramhasbeencross-compiledembeddeddevicesbasedonSamsungS3C6410CPULINUXcoreofgraphicaldisplaytechnology.Methodsandapplicationsofthepicturesdisplayedintheembeddeddevice.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.4 GIF格式图像123.4 PNG格式图像124 在PC下基于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从自然界获取信息感受外部世界,是通过听觉、视觉、触觉、嗅觉、味觉等来完成。大部分情况下人们都视觉的感知度要高于其他感觉,而视觉所看到的画面都是有图片组成的。而图像是人类视觉对图片快速反应的一个链接。图片快速的链接形成了像,所以说图像是“图”和“像”两者的结合。随着嵌人式技术的迅猛发展,嵌入式技术已经成为一个万众瞩目的焦点,目前已经广泛应用于信息家电、网络、工业控制、航空航天等领域。而Linux开源性、可定制性、可移植性等优点,及近年来在国内外的快速发展,使得其在嵌入式行业受到青睐。由于嵌入式硬件性能的不断提升,使得在嵌入式设备上运行各种图像成为可能。LINUX下FRAMEBUFFER是 控制台下的一个通用的图形接口,它拥有良好的平台无关性,可以支持绝大多数的硬件,因而得到愈来愈多厂家的支持,一些流行的图形库如 QT、GTK 便基于FRAMEBUFFER的。它的接口非常简单,通过它可以十分方便地构建一个图形系统。QT、GTK是面向对象开发图形界面软件使用的,有时不太适合部分要求低的嵌入式设备,而本文所重新编写的图形库,更加方便各种低要求的嵌入式设备使用,不需要加载过多程序,就可以在设备上显示JPEG,BMP格式的图片。本文基于LINUX下FRAMEBUFFER驱动,开发出一个用于ARM平台的嵌入式设备下图像显示的程序。具有高稳定性和高性能、移植性好等优点。1绪论1.1研究背景随着社会不断进步,技术不断更新,一轮又一轮的“技术革命”冲击着市场。从最初的“大块头”到现在的微乎其微,电子产品以一种迅猛的态势发展前进。随着社会生活不断提高,GDP的不断增长,人们在日常生活中对电子产品的依赖越来越强烈,手机几乎每人一部,电脑几乎人人都有。电子相册,MP3/MP4更不在话下。工业上已经过了人工控制的年代,处处都是大型机械数字化管理,工厂对人工的需求在下降,对技术的需求在上升。操作简便,直观明了成了工厂的新一轮技术发展趋势。几乎所有这些地方都用到了嵌入式技术,高速的嵌入式发展进度可以让设备越来越精致,越来越便于人们的携带,越来越让人容易控制和实现某些特定的功能。嵌入式系统就是以应用为中心,以计算机技术为基础,软硬件可裁减,适合应用系统对功能、可靠性、成本、体积和功耗要求的专用的计算机系统。嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统而在所有这些设备上,最共同的地方就是都有视窗,各种数据都是通过视窗的显示和使用人员进行交互。而数据也大多都是通过图片的方式进行显示。本文将会研究到这里边最基本最实用的功能,嵌入式设备下图像显示。1.2图像处理的现状及本文的意义伴随各种格式图像标准的颁布。国内外许多公司及个人开始了对嵌入式编解码的研究和实现工作。大致可分为以下几类:图像处理的集成板卡、基于不同处理器平台的实现、专用的图像处理Ic芯片、基于可编程逻辑器件的图像编解码处理芯片的设计与实现。随着ARM技术的不断发展,ARM处理器的速度在不断提高,其对数据处理的能力也越来越强,价格也在不断降低。ARM处理器具有性能高、成本低和能耗省的特点。适用于多种领域。本文基于ARM处理器设计了对成本要求相对较低,而相对基于DSP实现的和专门解码芯片的功能较强大的图像处理和显示的嵌入式程序。由于ARM芯片强大的控制能力和高速的数据处理能力。使得ARM在诸多嵌入式图像编解码实现方法中更具有优势。所以研究BMP,JPEG格式图片压缩和解压缩并现在在ARM上,具有很重要的价值和意义。2基本技术和芯片简介2.1嵌入式系统简介2.1.1嵌入式系统概念 嵌入式系统本身是一个相对模糊的定义。目前嵌入式系统已经渗透到我们生活中的每个角落,工业、服务业、消费电子,而恰恰由于这种范围的扩大,使得“嵌入式系统”更加难于明确定义根据IEEE(国际电机工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(原文为(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。 嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。所以,介入嵌入式系统行业,必须有一个正确的定位。例如Palm之所以在PDA领域占有70以上的市场,就是因为其立足于个人电子消费品,着重发展图形界面和多任务管理。 嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。所以,如果能建立相对通用的软硬件基础,然后在其上开发出适应各种需要的系统,是一个比较好的发展模式。目前的嵌入式系统的核心往往是一个只有几K到几十K微内核,需要根据实际的使用进行功能扩展或者裁减,但是由于微内核的存在,使得这种扩展能够非常顺利的进行。 一般而言,嵌入式系统的构架可以分成四个部分:处理器、存储器、输入输出(I/O)和软件(由于多数嵌入式设备的应用软件和操作系统都是紧密结合的,在这里我们对其不加区分,这也是嵌入式系统和Windows系统的最大区别)。2.1.2嵌入式系统的特点嵌入式系统的几个重要特征: 系统内核小。由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。比如Enea公司的OSE分布式系统,内核只有5K,而Windows的内核?简直没有可比性。 专用性强。嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全两个概念。 系统精简。嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。 高实时性的系统软件(OS)是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。 嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。嵌入式系统的应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS(RealTime Operating System)开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。 嵌入式系统开发需要开发工具和环境。由于其本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。目前嵌入式系统除了部分为32 位处理器外,大量存在的是8 位和16 位的嵌入式微控制器(MCU) ,嵌入式系统是计算机应用的另一种形态,正如前所述它与通用计算机应用不同:嵌入式计算机是以嵌入式系统的形式隐藏在各种装置、产品和系统之中的一种软硬件高度专业化的特定计算机系统。国内常见的嵌入式系统有7种:Linux、uClinux、WinCE、PalmOS、Symbian、uCOS-II、VxWorks。2.1.3嵌入式系统开发环境工具由于其本身不具备自主开发能力,即使设计完成以后,用户通常也是不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。如图所示。 嵌入式系统开发需要开发工具和环境2.1.4本次嵌入式程序开发环境利用虚拟机进行系统安装使用,虚拟机必须安装Vmware Tool(连接USB-TO-SERIAL)。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处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等它的典型开发版是S3C2410。ARM内核的数个系列(ARM7、ARM9、ARM9E、ARM10E、ARM11、SecurCore、Xscale、StrongARM),各自满足不同应用领域的需求,无孔不入的渗入嵌入式系统各个角落的应用。这是一个ARM的时代!本次我选择基于ARM11(ARM1176JZF-S)核的ARM处理器。ARM9处理器采用5级流水线,指令执行效率较ARM7高,而且带有MMU功能,这是与ARM7的重要区别。ARM11增加了向量浮点单元。同时,该系列的处理器支持指令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指令包含了针对媒体处理的单指令流多数据流(SIMD)扩展,采用特殊的设计,以改善视频处理性能。为了能够进行快速浮点运算,ARM11增加了向量浮点单元。所有这些结构上的提高,都是ARM9处理器不可比拟的。ARM11为便携式和无线应用,提供了从未有过的高超性能,并且使我们主要关心的成本和功耗减到最小。ARM11的微架构保证了系统性能可以从基本的350-500MHz范围扩展到最终的1GHz以上。OK6410开发板(图1-1)基于三星公司最新的ARM11处理器S3C6410,拥有强大的内部资源和视频处理能力,可稳定运行在667MHz主频以上,支持Mobile DDR和多种NAND Flash。OK6410开发板上集成了多种高端接口,如复合视频信号、摄像头、USB、SD卡、液晶屏、以太网,并配备温度传感器和红外接收头等。这些接口可作为应用参考帮助用户实现高端产品级设计。OK6410开发板采用核心板+底板结构,核心板尺寸规格为5CM6CM,底板尺寸为10.5CM14CM,核心板与底板之间采用4组高质量进口连接器(镍金工艺,接触好、抗氧化),共计320个引脚(804),方便客户进行二次开发,进行各种形式的扩展应用。OK6410的软件系统目前支持WinCE 6.0、 LINUX2.6.28、Android2.1以及uC/OS-II,提供标准板级支持包(BSP)并开放源码,其中包含了所有接口的驱动程序,客户可以直接加载使用。另外,该板可连接飞凌公司与之相配套使用的串口扩展板、WIFI模块、摄像头模块等。 图2-13图像格式解析3.1 BMP格式图像BMP格式 BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。这种格式的特点是包含的图像信息较丰富,乎不进行压缩,但由此导致了它与生俱生来的缺点-占用磁盘空间过大。位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、颜色表(color table)和位图数据。(1)位图文件头位图文件头包含有关于文件类型、文件大小、存放位置等信息,在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义:typedef struct int bfType;/bfType(2字节),这里恒定等于&H4D42,ASCII字符BM long bfSize;/文件大小,以4字节为单位 int bfReserve1;/备用 int bfReserve2;/备用 long bfoffBits;/数据区在文件中的位置偏移量 BITMAPFILEHEADER;/文件头结构体,14字节bmp文件以BITMAPFILEHEADER结构体开始,BITMAPFILEHEADER的第1个属性是bfType(2字节),这里恒定等于&H4D42。由于内存中的数据排列高位在左,低位在右,所以内存中从左往右看就显示成(42 4D),所以在UltraEdit中头两个 字节显示为(42 4D)就是这样形成的,以后的数据都是这个特点,不再作重复说明。 BITMAPFILEHEADER的第2个属性是bfSize(4字节),表示整个bmp文件的大小,这里等于&H000004F8=1272字节。BITMAPFILEHEADER的第3个、第4个属性分别是bfReserved1、bfReserved2(各2字节),这里是2个保留属性,都为0,这里等于&H0000、&H0000。 BITMAPFILEHEADER的第5个属性是bfOffBits(4字节),表示DIB数据区在bmp文件中的位置偏移量,这里等于&H00000076=118,表示数据区从文件开始往后数的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 biXPlosPerMeter;/水平分辨率,可省略long biYPlosPerMeter;/垂直分辨率,可省略long biClrUsed;/表示使用了多少个颜色索引表,一般biBitCount属性小于16才会用到,等于0时表示有2biBitCount个颜色索引表long biClrImportant;/表示有多少个重要的颜色,等于0时表示所有颜色都很重要 BITMAPINFOHEADER;/位图信息头,40字节BITMAPINFO段由两部分组成:BITMAPINFOHEADER结构体和RGBQUAD结构 体。其中RGBQUAD结构体表示图片的颜色信息,有些时候可以省略,一般的24位图片和32位图片都不带RGBQUAD结构体,因为DIB数据区直接表 示的RGB值,一般4位图片和8位图片才带有RGBQUAD结构体。(多少位的图片就是用多少位来表示一个颜色信息,例如4位图片表示用4个bit来表示 一个颜色信息。)一个bmp文件中有没有RGBQUAD结构体,可以根据前面BITMAPFILEHEADER结构体的第5个属性bfOffBits来判 断因为BITMAPINFOHEADER结构体长度为40bit,如果BITMAPINFOHEADER结构体结束后还未到DIB数据区的偏移量,就说 明接下来的数据是RGBQUAD结构体部分。这里特别对biBitCount进行详细介绍biBitCount=1 表示位图最多有两种颜色,缺省情况下是黑色和白色,你也可以自己定义这两种颜色。图像信息头装调色板中将有两个调色板项,称为索引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时,它没有调色板。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。你在读取一个像素之后,可以分别用掩码“与”上像素值,从而提取出想要的颜色分量。在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_BITFIELDS时,原来调色板的位置将被三个DWORD变量占据,成为红、绿、蓝掩码,分别用于描述红、绿、蓝分量在32位中所占的位置。 图象数据压缩 BI_RLE8:每个象素为8比特的RLE压缩编码,可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式可在同一幅图中的任何地方使用。 编码方式:由2个字节组成,第一个字节指定使用相同颜色的象素数目,第二个字节指定使用的颜色索引。此外,这个字节对中的第一个字节可设置为0,联合使用第二个字节的值表示: 第二个字节的值为0:行的结束。 第二个字节的值为1:图象结束。第二个字节的值为2:其后的两个字节表示下一个象素从当前开始的水平和垂直位置的偏移量。 绝对方式:第一个字节设置为0,而第二个字节设置为0030xFF之间的一个值。在这种方式中,第二个字节表示跟在这个字节后面的字节数,每个字节包含单个象素的颜色索引。压缩数据格式需要字边界(word boundary)对齐 BI_RLE4:每个象素为4比特的RLE压缩编码,同样也可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式也可在同一幅图中的任何地方使用。这两种方式是: 编码方式:由2个字节组成,第一个字节指定象素数目,第二个字节包含两种颜色索引,一个在高4位,另一个在低4位。第一个象素使用高4位的颜色索引,第二个使用低4位的颜色索引,第3个使用高4位的颜色索引,依此类推。 绝对方式:这个字节对中的第一个字节设置为0,第二个字节包含有颜色索引数,其后续字节包含有颜色索引,颜色索引存放在该字节的高、低4位中,一个颜色索引对应一个象素。此外,BI_RLE4也同样联合使用第二个字节中的值表示: 第二个字节的值为0:行的结束。第二个字节的值为1:图象结束。 第二个字节的值为2:其后的两个字节表示下一个象素从当前开始的水平和垂直位置的偏移量。压缩算法如下(1)压缩源图像文件PackYuan(FILE *sf,FILE *df)/*sf和df分别表示指向源文件和目标文件的指针*/sf=fopen(sfname,rb); df=fopen(dfname,wb);fseek(sf,number,0);/*定位到数据部分,number表示偏移量*/temp=第一个像素的颜色值;do ch=fread(sf);/*处理高字部分*/ch1=高字部分的颜色值;if(ch1=temp) count+;else /*改进部分即是下面这个if语句*/if(tag=FALSE) c1=temp;ic1=count; tag=TRUE; else c2=temp;ic2=count;c1=c14;c1=c1|c2;/*两色存到一个字节中*/fputc(ic1,df);fputc(ic2,df);fputc(c1,df);temp=ch1;count=1;tag=FALSE; /*处理低字部分,这部分处理和高字部分基本相同,故略去*/ch1=低字部分的颜色值;while(!feof(sf)fclose(sf); fclose(df);(2) 压缩已压缩过的图像文件压缩算法简述如下:PackYa(FILE sf, FILE df)/*sf和df分别表示指向源文件和目标文件的指针*/sf=fopen(sfname,rb); df=fopen(dfname,wb);fseek(sf,number,0);/*定位到数据部分,number表示偏移量*/do /*从待压缩的文件中读出一组数据*/ count1=fread(sf); color1=fread(sf);count2=fread(sf); color2=fread(sf);/*利用color1的高四位,把color1和color2合成一个字节*/color1=color1bpp, image-width, image-depth, &image-bytewidthdraw_bmp()函数流程Draw_bmp()Memcpy()Memset()Fb_open ()Fb_memoryStrcy()Mmap()read_bmp()函数流程read_bmp()init_image_buf ()Seek_image_buf()read_image_buf ()Calc_ptich()Malloc()Free()decode_RLE8 ()memcpy()eof_image_buf ()getc_image_buf ()Main()函数流程Draw_bmp()cetc_renderbmp()Memset()Main()free3.2 JPEG格式图像(1) 文件的基本结构 JPEG是常见的一种图像格式,它由联合照片专家组(Joint Photographic Experts Group)开发,JPEG文件的扩展名为.jpg或.jpeg,其压缩技术十分先进,我们最高可以把1.37MB的BMP位图文件压缩至20.3KB但是它用有损压缩方式去除冗余的图像和彩色数据,虽然一个图片经过转化为JPEG图像后,一些数据会丢失,但是,人眼是很不容易分辨出来这种差别的。也就是说,JPEG图像存储格式既满足了人眼对色彩和分辨率的要求,又适当的去除了图像中很难被人眼所分辨出的色彩,在图像的清晰与大小中JPEG找到了一个很好的平衡点。获取得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最的磁盘空间得到较好的图像质量虽然图像转化为JPEG格式会减小很多,但是并不是文件就变得简单了,相反,JPEG文件的格式是比较复杂的。不经过认真地分析,是不容易弄懂它的。以下是其各个部分的功能及于内存的位置组成部分编号起始位置字节号字段简写字段功能一FFD8SOI(Start of Image)图像开始二FFE0APP0应用程序定义三FFE1APP1存放应用程序FFE2APP2FFE3APP3FFE4APP4FFE5APP5FFE6APP6FFE7APP7FFE8APP8FFE9APP9FFEAAPP10FFEBAPP11FFECAPP12FFEDAPP13FFEEAPP14FFEFAPP15四FFDBDQT(difine quantization table)量化表定义五FFC0SOF(Start of Frame)帧图像开始六FFC4DHT(Difine Huffman Table)霍夫曼表定义七FFDASOS(Start of Scan)扫描开始 八FFD9EOI(End of Image)图像结束各个部分分解PP0组成编号具体信息1APP0长度(length)2标识符(identifier)3版本号(version)4X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)5X方向像素密度(X density)6Y方向像素密度(Y density)7缩略图水平像素数目(thumbnail horizontal pixels)8缩略图垂直像素数目(thumbnail vertical pixels)9缩略图RGB位图(thumbnail RGB bitmap),由前面的数值决定,取值3n,n为缩略图总APPn组成编号具体信息1、APPn长度(length)2、应用细节信息(application specific information)DQT(difine quantization table)组成编号具体信息1量化表长度(quantization table length)2量化表数目(quantization table number)3量化表(quantization table)SOF0(Start of Frame),组成编号具体信息1帧开始长度(start of frame length)2精度(precision),每个颜色分量每个像素的位数(bits per pixel per color component)3图像高度(image height)4图像宽度(image width)5颜色分量数(number of color components)6对每个颜色分量(for each component)包括:ID、垂直方向的样本因子(vertical sample factor)、水平方向的样本因子(horizontal sample factor) 、量化表号(quantization table#)DHT(Difine Huffman Table)组成编号具体信息1、霍夫曼表的长度(Huffman table length)2、类型、AC或者DC(Type, AC or DC)3、索引(Index)4、位表(bits table)5、值表(value table)SOS(Start of Scan)组成编号具体信息1扫描开始长度(start of scan length)2颜色分量数(number of color components) 包括:ID、交流系数表号(AC table #)、直流系数表号(DC table #)3每个颜色分量4压缩图像数据(compressed image data)(10)JPEG压缩解码器对压缩的图像数据可以通过解码过程,获得解压缩后重构的图像数据。解码的过程则是编码的逆过程。 (11) JPEG压缩的具体实现首先要编写下面函数:int writejpeg(char*filename,char*img,int wiidth,int height,int quality,int gray);filename是图像文件名,img是原始图像数据,width ,height是图像的宽度和高度,quality确定图像的压缩质量,gray确定图像的色彩。部分代码:jcfgimagewidth=width;jcfgimage_height=height;jcfginputcomponents=gray?l:3;jcfgin_color_space=gray?JCSFRAYSCALE:JCSRGB;jpegsetdefaults(&jcfg);jpeg_stdiodest(&jc垃,fp);jpeg startcompress(&jcfg,TRUE);line_length=gray?width:width十3;line=(unsigned char*)img;for(i=0,iheight;i+,line+Mine_length);jpeg_write_scanlines(&jcfg,&line,1);jpeg_finish_compress
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 门诊规范化管理安全制度
- 电力系统物资库管理课件
- 周期性中性粒细胞减少症个案护理
- 颈肋护理课件
- 枕叶性癫痫的护理查房
- 2025年护士执业资格考试题库:护理教育与培训护理护理伦理试题
- 二零二五年度车间承包与环境保护协议书
- 2025版绿色建筑评价标识施工合同标准范本
- 二零二五年城市绿化养护临时工聘用及绿化成果协议
- 2025年度出国劳务人员安全培训担保合同范本
- 中国心力衰竭诊断和治疗指南
- 全国闽教版初中信息技术八年级下册第一单元第2课《体验开源硬件与编程工具应用》说课稿
- GB/T 19701.2-2024外科植入物超高分子量聚乙烯第2部分:模塑料
- 道路及市政管网改造工程现场组织管理机构及施工准备方案
- 廉洁自律专题培训
- 高压氧治疗糖尿病
- 装配式围挡施工方案
- 四川达州历年中考语文现代文阅读真题42篇(含答案)(2003-2023)
- 助产士进修汇报课件
- 11SG814 建筑基坑支护结构构造
- DL-T997-2020燃煤电厂石灰石-石膏湿法脱硫废水水质控制指标
评论
0/150
提交评论