基于Android的绘图软件开发硕士学位论文1 精品.docx

上传人:b****0 文档编号:9344774 上传时间:2023-05-18 格式:DOCX 页数:78 大小:1.64MB
下载 相关 举报
基于Android的绘图软件开发硕士学位论文1 精品.docx_第1页
第1页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第2页
第2页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第3页
第3页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第4页
第4页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第5页
第5页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第6页
第6页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第7页
第7页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第8页
第8页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第9页
第9页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第10页
第10页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第11页
第11页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第12页
第12页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第13页
第13页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第14页
第14页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第15页
第15页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第16页
第16页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第17页
第17页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第18页
第18页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第19页
第19页 / 共78页
基于Android的绘图软件开发硕士学位论文1 精品.docx_第20页
第20页 / 共78页
亲,该文档总共78页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于Android的绘图软件开发硕士学位论文1 精品.docx

《基于Android的绘图软件开发硕士学位论文1 精品.docx》由会员分享,可在线阅读,更多相关《基于Android的绘图软件开发硕士学位论文1 精品.docx(78页珍藏版)》请在冰点文库上搜索。

基于Android的绘图软件开发硕士学位论文1 精品.docx

基于Android的绘图软件开发硕士学位论文1精品

硕士学位论文

 

基于Android的绘图软件开发

摘要

Android是Google于2007年发布的一款开源手机操作系统,由于Android最近几年的软件和硬件高速发展,越来越多的人开始使用Android并作为娱乐和工作平台。

与此同时随着现代绘图软件的发展,这使得通过数码手段复制自然绘画体验成为可能,传统意义上的纸上作图已经失去优势。

但是,目前Android平台并没有很多具有很好绘图效果的绘画工具应用。

考虑到Android绘图软件的开发价值和很好的应用前景,本文主要研究基于Android移动平台的绘图软件开发。

本文所做的研究工作主要在以下几个方面:

1.将开源绘图软件MyPaint的笔刷引擎以Java语言重写并移植到Android平台,并以此引擎进行本文的Android绘图软件的开发。

2.将开源视频编码库FFMPEG成功移植到Android平台,利用此库进行用户绘画过程的录制,并生成MP4格式的视频。

3.分析了Android底层开发的原理和方法,探讨了一种利用JNI机制进行Android底层c/c++开发技术。

4.实现了Android绘图软件的开发。

关键词:

Android,MyPaint,FFMPEG,NDK,绘图软件

Abstract

AndroidistheopensourcemobileoperationsystemwhichreleasebyGooglein2007.Inrecentyears,moreandmorepeoplebegintouseAndroiddevicesasentertainmentandworkingplatform,becauseofthehighspeeddevelopmentofAndroidsoftwareandhardware.Meanwhile,withthedevelopmentofmoderndrawingsoftware,thetraditionaldrawinghaslostitsadvantage,andmadeitpossiblecopyingnaturepaintingexperiencethroughdigitalmethod.ButtheAndroidplatformdidn'thavealotofapplicationwhichhavegoodeffectofpaint.ThispapermainlydiscussaboutAndroidpaintingsoftwaredevelopment,consideringofthevalueandgoodprospectforAndroidpaintingsoftware.

Inthispaper,themainresearchworkdoneinthefollowingaspects:

1.RewritetheMyPaint'sbrushengineinJavalanguageandtransplantitinAndroidplatform.Wewillusethisengineinourpaintingsoftwaredevelopment.

2.TransplanttheFFMPEGtoAndroidplatformsucceedandusingitforrecordinguser'spaintingprocess,atlastitwillgeneratevideofilewhichisMP4format.

3.AnalysistheprincipleandmethodoflowlevelcomponentdevelopmentinAndroidanddiscussesoneofc/c++developmenttechnologybyusingJNImethod.

4.OfthepaintingsoftwareforAndroiddevelopmentisrealized.

KeyWords:

Android,MyPaint,FFMPEG,NDK,PaintingSoftware

目录

摘要i

Abstractii

目录III

图目录V

第1章绪论1

1.1课题背景及意义1

1.1.1课题背景1

1.1.2课题意义1

1.2论文主要内容2

1.3本章小结2

第2章Android平台整体结构分析3

2.1Android系统架构3

2.2Android应用组件6

2.2.1AndroidManifest.xml6

2.2.2Activity6

2.2.3Service10

2.2.4BroadcastReceiver10

2.3本章小结10

第3章MyPaint笔刷引擎原理简介11

3.1MyPaint介绍11

3.2MyPaint笔刷引擎主要结构体介绍11

3.2.1MyPaintFixedTiledSurface结构介绍11

3.2.2MyPaintBrush结构介绍14

3.3MyPaint笔刷引擎工作原理16

3.3.1MyPaint的基本绘制单位——笔触16

3.3.2笔刷引擎的工作流程19

3.4本章小结24

第4章MyPaint笔刷引擎的Android版本移植25

4.1Android版本改写原因25

4.2MyPaintFixedTiledSurface的移植25

4.2.1View介绍25

4.2.2Surface类的设计26

4.2.3MyPaintBrush类的改写29

4.2.4实现结果分析对比32

4.3本章小结33

第5章绘图软件应用界面开发设计与实现34

5.1绘图软件的功能模块34

5.2笔刷选择模块34

5.3颜色选取模块设计37

5.4笔刷属性调节模块设计38

5.5绘图Activity设计39

5.6本章小结40

第6章Android底层组件开发方法41

6.1JNI机制41

6.1.1JNI简介41

6.1.2JNI的使用42

6.2AndroidNDK简介42

6.3Android底层组件开发步骤43

6.4本章小结44

第7章基于FFMPEG库的绘画过程录制实现45

7.1FFmpeg简介45

7.2绘图过程录制需求分析47

7.3FFmpegAndroid平台移植47

7.4编写FFmpeg封装层C代码51

7.4.1FFmpeg常用数据结构51

7.4.2底层编码流程51

7.5编写Android应用层代码60

7.6完整录制绘画过程流程63

7.7绘画过程录制功能效果分析65

7.8本章小结66

第8章结束语67

8.1论文工作总结67

8.2问题与展望67

参考文献69

图目录

图2.1Android系统架构图3

图2.2Acitvity栈结构7

图2.3Activity的四种状态的变换关系图8

图2.4Activity生命周期9

图3.1MyPaint常见的一些笔刷效果11

图3.2MyPaintFixedTiledSurface组成结构12

图3.3MyPaintFixedTiledSurface数据抽象形式13

图3.4MyPaintBrush结构图15

图3.5笔触图16

图3.6笔画放大图16

图3.7hardness与opaque关系图17

图3.8笔触透明度在不同hardness和d的分布17

图3.9喷枪效果笔刷18

图3.10椭圆形笔触18

图3.11椭圆形笔触的绘画效果19

图3.12笔触进行线性插值21

图3.13基于tile笔触分割22

图3.14Normal_and_Eraser混合算法24

图4.1Surface结构图26

图4.2Android版本与MyPaint版本的笔触对比图29

图4.3铅笔效果对比32

图4.4带透明度笔刷效果32

图4.5涂抹效果笔刷对比33

图5.1绘图软件功能模块图34

图5.2笔刷选择模块实现效果图37

图5.3颜色选取模块图38

图5.4笔刷属性条件模块图38

图5.5绘图软件界面40

图6.1FFmpeg编译调用关系46

图6.2直接编码写入文件流程53

图6.3编码生成通用视频格式文件流程55

图6.4完整实现底层录制流程58

图6.5Android端调用编码接口逻辑62

图6.6绘画录制开始流程63

图6.7编码一帧图像流程64

图6.8结束流程64

第1章绪论

1.1课题背景及意义

1.1.1课题背景

2007年11月,Google和84家硬件开发商、软件开发商以及电信运营商成立开放手持联盟来共同开发和改良Android系统,随后Google以Apache的免费开源许可的授权方式发布了Android源码,并更新至今[1]。

Android操作系统后来逐渐地拓展到平板电脑及其他领域上。

Google通过官方网上商店平台GooglePlay(之前叫做GoogleMarket),提供应用程序和游戏等应用供用户下载,截止至2012年6月,GooglePlay商店拥有超过60万个官方认证应用程序。

随着现代智能手机的快速发展,它已成为移动生活的最重要的承载设备,在人们的日常生活中扮演的角色也越来越重要。

加上手机开发厂商和Google的大力推广,以Android为操作系统的智能手机越来越流行。

随着Android平台的蓬勃发展,消费者对于基于Android手机应用需求也越来越强烈,正是基于这种原因,相应的手机应用软件领域也变得火暴起来。

从中我们不难看出基于Android平台软件开发蕴含广阔的发展前景。

正因为Android平台的硬件和软件高速发展,人们在Android等移动设备上办公娱乐的需求逐渐增强,一些对于美术感兴趣的人开始渐渐利用身边的移动设备上来进行绘画,用绘画来记录身边发生的事和物,并及时的和他人进行分享。

本文将实现一款基于Android平台的绘图软件的开发,方便人们随时随地使用身边的移动设备进行创作。

1.1.2课题意义

绘图软件,是一种利用现代技术来仿真传统绘画笔刷效果的模拟自然绘画的软件[2]。

它能够通过数字手段来模拟出传统笔刷效果。

它是图片处理软件和传统的纸上绘图的结合,吸取了两者的优势。

它比图片处理软件优势在于它能够模拟自然绘画过程,提高了用户体验。

比纸上做图的优势就更明显了,可以实现纸张上很多难以实现的效果,同时可以更便于长久保存和修改,数字化做图也节省了大量的纸质资源。

使得人们可以从传统中解放出来,颠覆了传统的绘画过程,大大提高了绘图效率,改善了绘图体验,将现代技术和传统方法相结合,形成了很特别的绘画体验。

但是,Android平台上大多数绘画软件功能都很弱,没有丰富效果的笔刷,缺少良好的用户体验。

由于Android是一款开源平台,开发文档丰富,很适合开发学习。

随着Android的越来越流行和完善,且市场上已经出现很多支持笔的压力感应的设备,可以更好的模拟自然绘画。

结合这些绘图软件面临的问题和他们的优势,使得基于Android移动平台的易用的模拟自然绘画的绘图软件会有很好前景。

1.2论文主要内容

根据所研究的内容,本文主要介绍一款基于Android的绘图软件开发过程:

1.从开源项目MyPaint(一款画图软件)中提取出笔刷引擎(C语言开发),分析其实现原理,将其改写成java版本,并使它针对自己项目进行一些优化、改进、定制,以使其适应自己项目的需求。

选择选择Mypaint的理由是,他支持丰富的模拟自然绘画的笔刷,且性能高,而且他的库可以很好的支持笔的压力感应,能最大程度上模拟出自然绘画的效果。

2.提出一种Android底层模块开发方法,并利用此方法和FFmpeg(开源视频编解码库)来进行用户绘画过程的录制,将其编码成MP4格式的视频文件。

使用FFmpeg库的原因是它目前最主流的免费开源的视频编解码库,具有很好的跨平台性,支持x86,arm架构的处理器。

3.在上述工作基础上编写Android绘图软件界面程序,处理Android事件的响应逻辑,实现了Android平台上的绘图软件开发。

1.3本章小结

本章主要介绍了Android绘图软件的研究背景和研究意义,并介绍了本论文的主要的工作内容。

第2章Android平台整体结构分析

为了进行Android平台上的软件开发,就必须要对Android平台的架构和各大组建进行分析,本章会对主要组件逐个进行分析。

2.1Android系统架构

Android的系统架构采用了分层的架构,和其他大部分的系统类似,从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层[3]。

Android系统架构如图2.1所示:

图2.1Android系统架构图

(1)第一层Linux内核(LinuxKernel)

Android操作系统的内核从Linux的一个分支而来,Google针对移动平台做了部分优化,该Linux层主要负责对上层的Dalvi虚拟机进行调度。

这一层主要用于保证进程的安全性,和对进程以及内存的进行一些管理,同时Android根据自身的需要,添加了一些内核驱动,比如触屏驱动,Binder驱动等。

(2)第二层本地框架和Java运行环境(LIBRARIES和ANDROIDRUNTIME)。

该层分为两个部分,分别为系统类库和Android运行时组件:

第一部分:

系统类库

系统库是由C/C++编写,是连接应用程序框架层与Linux内核层的重要纽带,它支撑着整个应用程序框架,这些库是Android系统中共用的,上层应用都可以通过Android应用层序框架来使用这些系统库,其主要分为如下几个部分:

a)SurfaceManager:

主要用于控制图像合成和绘制,管理显示的数据。

b)MediaFramework:

以OpenCore为基础进行开发,主要用于对多媒体功能的支持。

c)SQLite:

轻量级的数据库,其特点在于轻量性的设计结构,适合在手机上使用、占用资源非常少,运行高效可靠,可移植性好。

d)OpenGL|ES:

根据OpenGLES1.0API标准实现的3D绘图函数库,该库可以将硬件的3D功能进行最佳化处理和现实,能够很好的使用硬件加速或者优化后的软件加速。

OpenGLES是从OpenGL裁剪定制而来的,他去除了OpenGL中glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性,以使其更加适合移动设备[4]。

e)FreeType:

提供点阵字与向量字的描绘与显示。

f)SSL:

是SecureSocketLayer的缩写,处理保护网页通讯的协议。

g)WebKit:

一套网页浏览器的软件引擎。

h)Libc:

一套标准的C系统函数库,它继承自BSD,并专门为基于Linux嵌入式移动设备进行优化和定制。

i)SGL:

Skia图形库,底层的2D图形引擎。

第二部分:

Android运行时。

Android应用程序在AndroidRunTime中执行,其运行时分为核心库和优化过的Java虚拟机Dalvik。

a)核心库:

包含了Android运行时所需要的库函数。

b)Dalvik虚拟机:

Google针对移动平台对Java虚拟机进行了优化,形成了Dalvik虚拟机,它更加快速和高效,更适合移动设备。

但是Dalvik虚拟机只执行.dex的可执行文件。

当Java程序通过编译,最后还需要通过SDK中的工具转化成.dex格式才能在虚拟机上执行。

(3)第三层——应用程序框架(ApplicationFramework)。

应用程序框架是Android平台专门为应用程序开发而进行设计的,他提供了丰富的应用程序开发所需要的API,为开发者进行快速敏捷开发Android软件提供了可能。

隐藏在应用后面的是一系列的服务和系统[5],其中包括:

a)ActivityManager:

管理着Activity的生命周期以及维护这Activity的栈结构。

b)WindowManager:

管理Android系统中的所有窗口程序。

c)ContentProvider:

可以使不同类型不同功能的Android应用程序之间分享数据,提高了可扩展性。

d)ViewSystem:

它是Android界面中最基本的组件,大部分高级组件都是基于View进行改造,它决定了应用程序的样式。

e)NotificationManager:

它也是Android的特色之一,开发者可以在Android的状态栏中显示自己的通知信息,方便了用户获取消息的步骤。

f)ResourceManager:

管理应用程序中的所有资源文件,它可以根据不同的设备分辨率、大小、方向、当前语言来加载不同资源文件,提高了Android的自适应性[6]。

g)LocationManager(位置管理器):

提供Android的地理信息服务,比如地图应用。

(4)第四层——应用程序层(Applications)。

应用层是Android应用程序的集合,Android平台的电子设备,包括Android手机、Android平板、AndroidMP4、AndroidGPS等一系列电子产品的火热,很大程度上归功于大量丰富方便的Android软件[7]。

这其中包括email客户端、短信、日历、地图、浏览器、联系人管理程序等等。

从上文中得知Android的架构是分层的,非常清晰,分工很明确。

Android本身是一种叠层架构,它主要分成三层:

操作系统、中间件、应用程序。

在这三层中,用到了大量开源项目,体现出这些开源项目的价值。

2.2Android应用组件

通常Android主要由以下几个组件来构建一个完整的Android程序。

但是,并不是所有的Android应用程序都必须全部包含以下几个组件,也可以由下面的一个或者多个来构成。

2.2.1AndroidManifest.xml

AndroidManifest.xml是XML格式的Android程序声明文件,它用于配置一个应用程序运行时所需要的一些声明,这些声明包含程序所需的权限、Activity信息等,每个android程序都必须含有一个manifest文件。

2.2.2Activity

Activity是Android程序中最基本的组件,他是为用户操作而展示的可视化用户界面,是Android程序的表现层,显示可视化的用户界面,并接收与用户交互所产生的交互事件。

由于Activity是整个Android几大组件中最重要的一个,下面将进行详细介绍。

2.2.2.1Activity栈结构

Activity是遵循一种“先进后出”的规则,他呈现一种栈的结构。

当一个新的Activity出现时,前一个Activity成为中断状态并被放入到一个堆栈当中。

用户可使用返回键使前面一个Activity返回出来。

当一个Activity不需要时,也可以将其从历史堆栈中移除。

一般情况下,Android会为每一个应用程序保存一个从主界面开始的历史堆栈。

当系统资源不足时,被压入栈的Activity可能会被系统杀掉。

Activity栈遵循的规则如图2.2:

图2.2Acitvity栈结构

2.2.2.2Activity生命状态

Activity作为Android应用程序最重要的一部分,他主要有4种状态,分别如下:

a)活动状态:

一个新的Activity启动后,该Activity就会被压入栈中,他呈现在屏幕的最前端,处于栈顶位置,此时他可以直接和用户进行交互。

b)暂停状态:

当Activity被另一个透明或者Dialog样式的Activity覆盖部分遮挡时,此时它依然和窗口管理器相连,系统会继续维护其内部状态,但是他已失去焦点,不能进行UI交互。

c)停止状态:

当Activity在界面上完全不能被用户看到,完全被遮挡时,此时就出去停止状态。

处于停止状态的Activity会很容易被系统回收,所以处于停止状态时,一定要保存当前的数据变量和当前的界面状态,否则一但Activity退出或者关闭,当前的数据和界面状态就会失去。

d)非活动状态:

不在以上三种状态中的就是非活动状态。

即Activity被杀掉以后和启动之前,要手动终止Activity可以在程序中调用finish方法。

这个状态下Activity已经从Activity堆栈中移除,要重新启动才能显示和进行交互。

Activity的四种状态的变换关系如图2.3。

图2.3Activity的四种状态的变换关系图

2.2.2.3Activity生命周期

Android平台是个多任务操作系统,他能够保证在当前任务未完成时和随时切换到其他应用程序。

他具有自己的生命周期。

Activity生命周期如图2.4所示:

图2.4Activity生命周期

从图2.4可以看出一个Activity的生命周期中有以下几个方法会被系统回调:

a)onCreat()方法:

当Activity被启动时,会最先回调该方法,在该回调函数中我们常常进行一些程序初始化的工作。

在Eclipse中,创建Android项目时,会自动创建一个Activity,在这个Activity中,默认重写了onCreat(BundlesavedInstanceState)方法,用于该Activity初始化。

b)onStart()方法:

当Activity显示在屏幕上时,该函数被回调。

c)onRestart()方法:

当Activity从停止状态进入活动状态前,调用该函数,该方法总是在onStart()方法以后执行。

d)onPause()方法:

暂停Activity时被回调,一般用来保存持久的数据或释放占用的资源。

该方法需要被非常快速的执行,因为直到这个方法执行完毕以前,下一个Activity都不能被恢复。

e)onResume()方法:

当Activity由于暂停状态恢复为活动状态时调用。

调用后,此时的Activity位于Activity栈的栈顶。

f)onStop()方法:

当Activity进入停止状态时,该函数被回调。

g)onDestroy()方法:

在Activity被销毁前,该函数被毁掉,主要用于释放当前Activity的资源,表示该Activity即将消失。

2.2.3Service

Service是Android系统中可以在后台运行的服务组件,一般使用Service时不提供用户界面,但是如果有特别需要也可以使用WindowManager表现一个悬浮窗口界面。

它可以长

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2