文档库 最新最全的文档下载
当前位置:文档库 › 基于Linux电子相册的

基于Linux电子相册的

基于Linux电子相册的
基于Linux电子相册的

本科毕业论文(设计) 题目:基于Linux电子相册的

设计与实现

学院:数学与计算机科学学院

班级:2010级计算机本科一班

基于Linux电子相册的设计与实现

摘要:随着科技的不断进步,我们的学习和生活也在发生着日新月异的变化。普通的相册已经不能满足人们的需求,电子相册渐渐的成为了当今相册的主流。通过对电子相册需求的分析与自己所学知识的结合,基于Linux操作系统,设计制作出了这款电子相册。本系统以C语言知识为主,并结合QT和C++面向对象的思想,运用Unix环境高级编程中的信号量机制和管道,实现进程与进程、线程与线程之间的通信,最终完成了各个界面之间的调用与衔接。主要功能有欢迎界面、相片浏览、音乐播放、鼠标操作、键盘的操作。相片浏览主要功能有:上一张、下一张、放大、图片特效、退出功能。音乐播放:播放、暂停、上一曲、下一曲、音量增加、音量减小。鼠标控制:绘制鼠标、移动鼠标、点击与返回鼠标坐标。键盘:通过读出设备文件做出相应的操作等各种基本功能。

关键词:Linux;电子相册;C语言;Qt;C++

目录

1 绪论 (1)

1.1 开发背景 (1)

1.2 开发目的..................................................................... 错误!未定义书签。

2 需求分析 (2)

2.1 概述 (2)

2.2 性能需求 (2)

2.3 功能需求 (2)

2.4 系统界面 (3)

3项目技术 (3)

3.1 搭建开发环境 (4)

4 软件的设计与实现 (5)

4.1 概要设计 (5)

4.1.1 设计思想 (5)

4.1.2 设计原则 (5)

4.1.3 模块概要设计 (5)

4.1.4电子相册的操作流程 (7)

4.2 详细设计 (9)

4.2.1欢迎界面的设计 (10)

4.2.2主页面的设计 (10)

4.2.3相片览模块的设计 (10)

4.2.4音乐播放的设计 (11)

4.2.5鼠标控制的设计 (11)

4.2.7总控制的设计 (11)

4.3 数据结构 (11)

4.4 编码的实现 (12)

5 软件测试 (12)

5.1 性能测试 (12)

5.2 硬件上测试 (13)

6设计总结 (13)

参考文献: (14)

1 绪论

1.1 开发背景及目的

1.开发背景

Linux就是一套操作系统,Linux的前身是Unix,Linux提供了一个完整操作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭Unix良好的传统而来的,所以相当稳定并且功能强大,可移植性非常好。本设计采用的是嵌入式Linux系统。首先,Linux是开放源代码,是遍布全球的众多Linux爱好者和Linux开发者的强大技术支持;其次,Linux的内核小、效率高,性能稳定,裁剪性很好, 开发和使用都很容易,移植性很强,即用Linux环境开发的产品,二次开发方便。

图1.1 Linux Logo

Linux是一套免费试用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。Linux 以它的高效性和灵活性著称。它能够在PC计算机上实现全部的Unix特性,具有多任务、多用户的能力。

2.开发目的

近几年,嵌入式系统产品日臻完善,并在全世界各行业得到广泛应用。嵌入式系统产品的研制和应用已经成为我国信息化带动工业化,工业化促进信息化发展的新的国民经济增长点。随着消费家电的智能化,嵌入式更显重要。据预测,随着Internet的迅速发展和廉价微处理器的出现,嵌入式系统将在日常生活里形成更大的应用领域。基于嵌入式Linux的电子相册比一般的电子相册更加的具有优越性和实用性。所以,我们有理

由相信基于嵌入式Linux的电子相册必将成为未来电子相册的主流。

2 需求分析

需求分析在软件开发中是一项非常重要的工作。在需求分析中,我们需要确定客户的需要。并且根据客户的需求,以及我们的实际情况,构思和制定出一个完善的设计方案,本章较为系统和详细的阐述了该电子相册全面而合理的需求。

2.1 概述

随着数码相机逐步走进寻常百姓家中,人们对电子相册的需求不断增加。电子相册提供给用户的不仅仅是一个存储空间,更多的是拥有了与他人分享和交流的机会,这是一个新生事物但却大有前景。现在主流的电子相册应用软件,其体积普遍庞大,占用较多的内存,对硬件的要求高,因此开发一个运行速度快,占用空间小,对硬件要求较低的功能实用的基于嵌入式Linux电子相册的应用软件非常有意义。

2.2 性能需求

1. 响应速度:

不论是什么样的软件,在设计和实现的时候,必须要考虑软件的响应速度,所以,一款优秀的软件必须将响应速度设计在用户可忍耐的范围内。该软件内存占用率小

2. 流畅性:

用户在使用软件的时候,系统应在用户忍耐时间范围内的作出响应,如果不能及时的回馈用户的反应,即使功能再丰富的软件,也注定不会受用户的认可。

3. 舒适度:

在软件的设计的时候,要将各组件的间距、顺序设计的符合大众习惯。使用一些提示的文字或图片等提示用户操作。

2.3 功能需求

1.基本功能

(1).手动浏览

可以实现查看上一张、下一张,实现图片的放大与缩小。

(2).全屏播放

可以实现图片的暂停和播放,每张图片的展示都有不同的特效。

(3).音乐播放

可以实现音乐的上一曲、下一曲播放,实现音量的调节。

(4).返回主界面//如上

系统退出到主界面。

图2-1 系统主界面

2.4 系统界面

设计一款软件界面的时候,非常有必要考虑各个组件之间合理的布局,我们在给定大小的界面中完成各个组件的布局时,既不能让各组件太“拥挤”,也不能让各组件之间距离太远,孤零零的,组件之间的间距一定要适中,让人看着舒服。而且各组件在顺序上的安排要满足用户的习惯性的操作,尽量减少用户误操作的可能。在一些组件上要使用图片按钮,提示用户各个组件的作用和操作方法,以及在整个界面的颜色的搭配上要做到舒适,既不要让用户感到“刺眼”,也不要让用户感觉到界面太“冷淡”,界面的颜色一定要选择以暖色为主调。

3项目技术及开发环境的搭建

3.1 搭建开发环境

1. 准备所需软件包:

Re dhat linux 9.0,qt-X11-opensource-src-4.5.3

2. 软件的安装:

(1) 安装虚拟机Vmware虚拟机。

(2) 在vmvare虚拟机中安装linuxRedhat9.0操作系统,并配置网络,内存,以及用户等等。

(3)安装Qt开发包。

1.将qt-X11-opensource-src-4.5.3解压到/root/usr/local/trolltech目录下

2.设置环境变量:

3.在终端中进入解压的目录下

4.在该目录下输入./configure检查安装包

5、输入gmake编译程序;

6、输入gmake install 进行程序的安装;

7、安装完成,输入qmake -v 可以查看QT版本;

3. QT技术介绍

QT是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能,Qt很容易扩展,并且允许真正地组件编程,基本上,Qt 同X Window 上的Motif,Openwin,GTK 等图形界面库和Windows平台上的MFC,OWL,VCL,ATL 是同类型的东西。

(1)优良的跨平台特性。Qt几乎支持现在流行的所有操作系统

(2)面向对象。Qt 的良好封装机制使得Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt 运用信号和槽机制来对消息进行处理,提高了各进程之间协同处理的效率。

(3)丰富的API。Qt 包括多达250 个以上的C++ 类。甚至还包括正则表达式的处理功能。

(4)支持2D/3D 图形渲染。

(5)提供了多种类型的文档。例如QT Assistant,它是一个完全可自定义,重新分配的帮助文档,他可与基于Qt的应用程序运行,使用Qt助手,开发小组同样能够很大程度上加快文档的处理过程[9]。

(6)XML 的支持。

4. 采用Frambuffer

5. 采用Libjpeg库

libjpeg 是一个被广泛使用的JPEG 压缩/解压缩函数库(至少在Unix类系统下是广泛使用的),它能够读写JFIF格式的JPEG图像文件,通常这类文件是以.jpg 或者.jpeg 为后缀名的。通过libjpeg库,应用程序可以每次从JPEG压缩图像中读取一个或多个扫描线(scanline,所谓扫描线,是指由一行像素点构成的一条图像线条),而诸如颜色空间转换、降采样/增采样、颜色量化之类的工作则都由libjpeg 去完成了。

6. 采用Libmad库

libmad 是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好,很多播

放器如mplayer、xmms等都是使用这个开源库进行解码的;

7. 采用freetype字体库

它是开源免费、高质量可移植的字体引擎,它提供统一的接口,来访问多种字体格式,使用的是高度模块化的程序库,可以灵活的进行裁剪。它是采用C语言实现的。

4 软件的设计与实现

4.1 概要设计

通过第二章的需求分析和第三章提到的技术的了解。对于电子相册的各种功能实现已经明了。接下来的概要设计将详细概述本软件的整体流程,规划软件怎样开发的总领提纲。

4.1.1 设计思想

本电子相册我们采用模块化编程,共5大模块:主控制、音乐播放、相册浏览、鼠标控制、键盘控制。在总体框架上运用多线程、多进程、信号量机制等。

4.1.2 设计原则

合理化分配内存,做到安全释放,避免内存泄漏。尽量减小内存的占用。

4.1.3 模块概要设计

如图(4-1)是系统功能的框架图。

图4-1 系统框架图

鼠标点击,选择进入手动浏览,选择所要浏览的图片,通过鼠标和键盘,实现手动

浏览的以下功能。

鼠标点击。选择进入全屏播放,通过鼠标和键盘,实现全屏播放的以下功能。

图4-3 全屏播放框架图

鼠标点击,选择进入音乐播放,通过鼠标和键盘,实现音乐播放的以下功能。

图4-3 音乐播放框架图

4.1.4电子相册的操作流程

先在init5模式下输入命令source env.sh(设置一些环境变量)

再运行service gpm stop(禁用系统鼠标)

然后运行./main

1.进入欢迎界面

2.单击鼠标右键进入主界面

3.鼠标选择进入相应的功能模块

3.1手动浏览功能

在手动浏览中,用户可以通过鼠标和键盘控制,查看上一张,下一张图片,可以实现图片的放缩。同时可以播放音乐。

3.2 全屏播放

在全屏播放中,每张图片的播放都有其各自的特效,可以实现图片的暂停和播放。

3.3 音乐播放

在音乐播放中,可以实现音乐的上一曲,下一曲播放,音量的调节。

4.系统退出

4.2 详细设计

我们的相册主要包括:欢迎界面、主界面、相片浏览、音乐播放、鼠标控制、键盘

控制,系统退出。每个模块的功能和具体的实现如下:

4.2.1欢迎界面的设计

进入应用程序最先执行的模块。在主函数即main函数中调用initscreen()函数。该函数首先打开Linux下的/dev/fb0以启动FrameBuffer的设备文件,通过使用framebuffer 与jpeg库的使用在linux的窗口下画图片,通过jpeg库将以后缀为.jpeg的图片转换为二进制数,然后在屏幕下每个相素点画出相应的点。进而使欢迎界面的图片显示在我们的窗口上。接着通过ioctl()函数获取屏幕信息,并调整我们的图片大小以适应屏幕大小。

4.2.2主页面的设计

在欢迎界面下,单击鼠标左键,

有四个按钮,分别是:手动浏览,全屏浏览,音乐播放,主控制。通过鼠标点击按钮进入相应的模块。

4.2.3相片览模块的设计

浏览模块又分为手动浏览和全屏浏览。

对于图片的浏览,首先是定义一个屏幕的结构体,然后通过读设备文件的信息将其赋值,将屏幕的内存地址映射到结构体的u32_t mem成员上,画点时在内存映射相对应的位置上画点。在销毁屏幕信息时解除对应地址的映射。画点函数在每张相片的显示中至关重要。我们的相片都是以.jpeg为后缀的,此时就需要jpeg库来进行操作。首先是我们需要配置库,然后安装。依次需要的命令是./configure、make、make install。

我们通过运用库函数中的一些函数来来对图片进行解码、缩放、相素转换、显示图片。我们的界面就是通过改变画图的位置来进行组合,形成我们所看到的界面。播放时的效果就是通过改变画图的方式。

在手动浏览功能中,我们运用管道机制来实现鼠标和主进程之间的通信,从而控制图片的上一张下一张播放。在主函数中调用pipe()函数创建管道,接着调用fork()函数创建子进程,关闭父进程的写端和子进程的读端,这样就创建了从子进程到父进程的IPC通道。若鼠标点击下一张按钮,就向管道中写入要求执行播放下一张的命令,主进程读取命令后,执行播放下一张图片的函数。

在全屏浏览中,我们用C语言编写了不同的图片的展示方式。每张图片都设有各自的特效。

4.2.4音乐播放的设计

主要有播放功能,上一曲,下一曲,暂停播放,继续播放,音量的调节。

我们通过操作音乐库,先是配置音乐库,然后通过改变音乐库中的播放函数来进行音乐播放的相应操作,音乐播放主要是通过全局变量的设定来操作(播放、下一首、当前播放的序号、停止播放)我们的全局变是是通过读鼠标在界面中所单击的位置来置位的。

4.2.5鼠标控制的设计

首先我们要画一个鼠标,并且记录鼠标的初始位置,点击位置,以及相应键的响应。先定义了一个鼠标状态结构体

typedef struct

{

u8_t btn;

u8_t x;

u8_t y;

} mouse_t;

定义一个数组放的是颜色的宏定义,通过使用framebuffer,来画点,画出鼠标的形状,在每次使用鼠标前,先把鼠标对应位置的数据保存起来,用来等鼠标移开时恢复其原来的数据。还有解决鼠标的边界问题。当鼠标移动到超出屏幕时,令他停在屏幕边界。最后把现在鼠标的状态通过管道写出去,然后其他子进程通过读出鼠标的状态判断自己相应的操作。

在整个软件执行阶段,鼠标的工作量是最大的!

4.2.6键盘控制的设计

通过读取标准输入判定并做出相应的操作首先是注册一个信号,通过标准输入来读,然后通过getchar()函数来获取键盘的输入。判断鼠标的输入是否是一个’q’,如果是’q’则发送一个SIGQUIT来终止程序的进程。不是,则把键盘输入的值通过进程传递给音乐进程,音乐进程通过判断键盘输入的值来实现上一首,下一首,暂停,播放功能。

4.2.7主控制的设计

一个父进程和四个子进程,通过管道和信号量机制来实现进程之间的通信。

4.3 数据结构

1.双向链表

首先建立一个链表的结构体,然后通过后值插入法,在链表的结点中填加数据,并且通过结构体中的数据ID号来寻找相对应的数据。

typedef struct node{

char data[255];

struct node *prior,*next;

}ListNode;

typedef ListNode* LinkList;

typedef struct{

LinkList head;

LinkList rail;

}List;

2.文件操作

通过打开一个文件夹,读出文件夹下所有的文件,并把所有的文件路径名加入到双向链表的数据中,然后通过传递链表的头结点,每个函数来做相应的操作。

4.4 编码的实现

本文档关键性核心代码参见附录。

5 软件测试

软件的测试在开发的过程是一个不可缺少的关键性环节,要开发一款性能优良的软件,必须要进过严格的软件测试,只有通过严格测试的软件才是一款优秀的软件。通过软件测试可以找出其中潜在的bug、逻辑上的错误等非人为潜在危险,并及时的对软件进行修改,减少在用户使用过程中不必要的麻烦。

5.1 性能测试

表5.1 软件测试

5.2 硬件上测试

将软件安装到真实的Arm物理设备上进行测试。测试的步骤相同,测试的结果符合开发要求。

6设计总结

通过完成此项目的开发,学习和巩固了所学的编程知识,同时也学习了一些诸如Qt 界面编程的新技术,开拓了自己的视野以及知识面,增强了自己动手解决问题的能力,具体做出如下总结:

本系统是基于linux操作系统下进行的,充分应用了QT界面编程技术,并且应用了C++面向对象的思想,大量运用类(class),完成了对界面所有组件的编写,运用信号(signal),槽函数(slot),把各按钮与功能实现函数相联系,完成了诸如界面切换,音乐播放等功能。

系统基本上实现了所预期的功能。但是由于知识的局限以及个人经验不足等原因,有的功能还不是很理想,诸如音乐播放不流畅等问题。综合这些过程,正如一句老话“学无止境”,今后还需要不断的完善和充实自己。

参考文献:

[1] 丁秋林.Java应用中的汉字乱码问题分析[J].计算机技术与发展期刊,2006,16(1):158-161.

[2] Chao Wang,Wei Duan,Jianzhang Ma,Chenhui Wang.The research of Android Systemarchitecture and application programming[J].Computer Science and Network Technology(ICCSNT),2011 International Conference,Page(s):785-790.

[3] 柴若楠等.音视频同步技术综述[J].计算机系统应用,2011,20(11):223~226.

[4] 施佳子.i Phone平台移动流媒体播放器的实现与优化[D].武汉:华中科技大学,2009,05.

[5] https://www.wendangku.net/doc/9910575017.html,.Android[OL].https://www.wendangku.net/doc/9910575017.html,/wiki/Android.

[6] 柯元旦.Android内核剖析[M].北京:电子工业出版社,2011.

[7] 杨丰盛.Android技术内幕[M].北京:机械工业出版社,2011.

[8] 简洪波.基于Symbian平台的移动流媒体客户端的研究和实现[D].武汉:华中科技大学,2007,01.

[9] 王世江.Google Android开发入门指南(第2版)[M].北京:人民邮电出版社,2009.

[10] 王冠宇,关永,赵冬生.J A V A在SQLite嵌入式数据库中的应用[J].微计算机信息,2006,22(1):94~95.

[11] 陈佳科,刘冀伟,洪英杰,董晓宇.基于无线网络环境下的移动流媒体系统的实现[J].微计算机信息,2005,21(1):109~110.

[12] Wenhao Wang, Mingyu Gao.Design of embedded media player based on S3C2440 and

SDL_FFMPEG[J].Electrical and Control Engineering (ICECE),2011 International

Conference.2011, Page (s):2979~2982.

The Electronic Photo Album Based on Linux System Abstract:With the constant progress of science and technology, our study and life are changing with the changing. Photo album has can't satisfy people's needs, electronic photo album gradually became the mainstream of today's photo album. Through the analysis of the electronic photo album with their knowledge in the combination of based on Linux operating system, the design made the electronic photo album. This system is given priority to with QT knowledge, combined with the C language and C + + object-oriented thought, using the signals and slots mechanism in the QT, eventually completed the interface between call and cohesion. The main functions are welcome screen, photo browsing, music playback, mouse, keyboard operation. Photo browsing degrees to features: on a picture, the next, amplification, special effects, the exit function. Music playback: play, pause, a song, the next song, the volume increases, the volume decreases. The mouse control: draw the mouse, move the mouse, click and return the mouse coordinates. With the progress of keyboard: through the readout device files and other basic functions.

Key Words: Linux;Electronic photo album;C Language;Qt;C++

相关文档
相关文档 最新文档