1、浙江大学硕士学位论文 摘要i基于 Android 的绘图软件开发 浙江大学硕士学位论文 摘要ii摘要Android 是 Google 于 2007 年发布的一款开源手机操作系 统,由于 Android最近几年的软件和硬件高速发展,越来越多的人开始使用 Android 并作为娱乐和工作平台。与此同时随着现 代绘图软件的发展, 这使得通过数码手段复制自然绘画体验成为可能,传统意义 上的纸上作图已经失去优势。但是,目前 Android 平台并没有很多具有很好绘图效果的绘画工具应用。考虑到 Android 绘图软件的开发价值和很好的应用前景,本文主要研究基于 Android 移动平台的绘图软件开发。本
2、文所做的研究工作主要在以下几个方面:1. 将开源绘图软件 MyPaint 的笔刷引擎以 Java 语言重写并移植到 Android平台,并以此引擎进行本文的 Android 绘图软件的开发。2. 将开源视频编码库 FFMPEG 成功移植到 Android 平台,利用此 库进行用户绘画过程的录制,并生成 MP4 格式的视频。3. 分析了 Android 底层开发的原理和方法,探讨了一种利用 JNI 机制进行Android 底层 c/c+开发技术。4. 实现了 Android 绘图软件的开发。关键词: Android, MyPaint, FFMPEG, NDK, 绘图软件浙江大学硕士学位论文 Ab
3、stractiiiAbstractAndroid is the opensource mobile operation system which release by Google in 2007. In recent years, more and more people begin to use Android devices as entertainment and working platform, because of the high speed development of Android software and hardware. Meanwhile, with the de
4、velopment of modern drawing software, the traditional drawing has lost its advantage, and made it possible copying nature painting experience through digital method. But the Android platform didnt have a lot of application which have good effect of paint. This paper mainly discuss about Android pain
5、ting software development, considering of the value and good prospect for Android painting software.In this paper, the main research work done in the following aspects:1. Rewrite the MyPaints brush engine in Java language and transplant it in Android platform.We will use this engine in our painting
6、software development.2. Transplant the FFMPEG to Android platform succeed and using it for recording users painting process, at last it will generate video file which is MP4 format.3. Analysis the principle and method of low level component development in Android and discusses one of c/c + + develop
7、ment technology by using JNI method.4. Of the painting software for Android development is realized.Key Words:Android ,MyPaint, FFMPEG, NDK, Painting Software 浙江大学硕士学位论文 图目录IV目录摘要 .iAbstract.ii目录 .III图目录 .V第 1 章 绪论 .11.1 课题背景及意义 .11.1.1 课题背景 .11.1.2 课题意义 .11.2 论文主要内容 .21.3 本章小结 .2第 2 章 Android 平台整体结
8、构分析 .32.1 Android 系统架构 .32.2 Android 应用组件 .62.2.1 AndroidManifest.xml .62.2.2 Activity .62.2.3 Service .102.2.4 BroadcastReceiver.102.3 本章小结 .10第 3 章 MyPaint 笔刷引擎原理简介 .113.1 MyPaint 介绍 .113.2 MyPaint 笔刷引擎主要结构体介绍 .113.2.1 MyPaintFixedTiledSurface 结构介绍 .113.2.2 MyPaintBrush 结构介绍 .143.3 MyPaint 笔刷引擎工作原
9、理 .163.3.1 MyPaint 的基本绘制单位 笔触 .163.3.2 笔刷引擎的工作流程 .193.4 本章小结 .24第 4 章 MyPaint 笔刷引擎的 Android 版本移植 .254.1 Android 版本改写原因 .254.2 MyPaintFixedTiledSurface 的移植 .254.2.1 View 介 绍 .254.2.2 Surface 类的设计 .264.2.3 MyPaintBrush 类的改写 .294.2.4 实现结果分析对比 .324.3 本章小结 .33浙江大学硕士学位论文 图目录V第 5 章 绘图软件应用界面开发设计与实现 .345.1 绘
10、图软件的功能模块 .345.2 笔刷选择模块 .345.3 颜色选取模块设计 .375.4 笔刷属性调节模块设计 .385.5 绘图 Activity 设计 .395.6 本章小结 .40第 6 章 Android 底层组件开发方法 .416.1 JNI 机制 .416.1.1 JNI 简介 .416.1.2 JNI 的使用 .426.2 Android NDK 简介 .426.3 Android 底层组件开发步骤 .436.4 本章小结 .44第 7 章 基于 FFMPEG 库的绘画过程录制实现 .457.1 FFmpeg 简 介 .457.2 绘图过程录制需求分析 .477.3 FFmpe
11、g Android 平台移植 .477.4 编写 FFmpeg 封装层 C 代码 .517.4.1 FFmpeg 常用数据结构 .517.4.2 底层编码流程 .517.5 编写 Android 应用层代码 .607.6 完整录制绘画过程流程 .637.7 绘画过程录制功能效果分析 .657.8 本章小结 .66第 8 章 结束语 .678.1 论文工作总结 .678.2 问题与展望 .67参考文献 .69浙江大学硕士学位论文 图目录VI图目录图 2.1 Android 系统架构图 .3图 2.2 Acitvity 栈结构 .7图 2.3 Activity 的四种状态的变换关系图 .8图 2.
12、4 Activity 生命周期 .9图 3.1 MyPaint 常见的一些笔刷效果 .11图 3.2 MyPaintFixedTiledSurface 组成结构 .12图 3.3 MyPaintFixedTiledSurface 数据抽象形式 .13图 3.4 MyPaintBrush 结构图 .15图 3.5 笔触图 .16图 3.6 笔画放大图 .16图 3.7 hardness 与 opaque 关系图 .17图 3.8 笔触透明度在不同 hardness 和 d 的分布 .17图 3.9 喷枪效果笔刷 .18图 3.10 椭圆形笔触 .18图 3.11 椭圆形笔触的绘画效果 .19图
13、3.12 笔触进行线性插值 .21图 3.13 基于 tile 笔触分割 .22图 3.14 Normal_and_Eraser 混合算法 .24图 4.1 Surface 结构图 .26图 4.2 Android 版本与 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.1 FFmpeg 编译调用关系 .46图
14、 6.2 直接编码写入文件流程 .53图 6.3 编码生成通用视频格式文件流程 .55图 6.4 完整实现底层录制流程 .58图 6.5 Android 端调用编码接口逻辑 .62图 6.6 绘画录制开始流程 .63浙江大学硕士学位论文 图目录VII图 6.7 编码一帧图像流程 .64图 6.8 结束流程 .64浙江大学硕士学位论文 第 1 章 绪论1章 1 章 绪论1.1 课题背景及意义1.1.1 课题背景2007 年 11 月,Google 和 84 家硬件开发商、 软件开发商以及电信运营商成立开放手持联盟来共同开发和改良 Android 系统,随后 Google 以 Apache 的免费
15、开源许可的授权方式发布了 Android 源码,并更新至今 1。Android 操作系统后来逐渐地拓展到平板电脑及其他领域上。Google 通过官方网上商店平台 Google Play(之前叫做 Google Market),提供应用程序和游戏等应用供用户下载,截止至2012 年 6 月,Google Play 商店拥有超过 60 万个官方认证应用程序。随着现代智能手机的快速发展,它已成为移动生活的最重要的承载设备,在人们的日常生活中扮演的角色也越来越重要。加上手机开发厂商和 Google 的大力推广,以 Android 为操作系统的智能手机越来越流行。随着 Android 平台的蓬勃发展,消
16、 费者对于基于 Android 手机应用需求也越来越强烈,正是基于这种原因,相应 的手机应用软件领 域也变得火暴起来。从中我们不难看出基于 Android平台软件开发蕴含广阔的发展前景。正因为 Android 平台的硬件和软件高速发展,人们在 Android 等移动设备上办公娱乐的需求逐渐增强,一些对于美术感兴趣的人开始渐渐利用身边的移动设备上来进行绘画,用绘画来 记录身边发生的事和物,并及时的和他人进行分享。本文将实现一款基于 Android 平台的绘图软件的开发,方便人们随时随地使用身边的移动设备进行创作。1.1.2 课题意义绘图软件,是一种利用现代技术来仿真传统绘画笔刷效果的模拟自然绘画
17、的软件 2。它能够通过数字手段来模拟出传统笔刷效果。它是图片处理软件和传统的纸上绘图的结合,吸取了两者的优势。它比 图片处 理软件优势在于它能够模拟自然绘画过程,提高了用户 体验。比 纸上做图的优势 就更明显了,可以 实现纸张上很多难以实现的效果,同 时可以更便于长久保存和修改,数字化做图也节省了大量的纸质资源。使得人们 可以从传统中解放出来,颠覆了传统的绘画过程,大大提高了绘图效率,改善了 绘图体验,将 现代技术和 传统方法相结合,形成了很特别的绘画体验。但是,Android 平台上大多数绘画 软件功能都很弱,没有丰富效浙江大学硕士学位论文 第 1 章 绪论2果的笔刷,缺少良好的用户体验。由
18、于 Android 是一款开源平台,开发文档丰富,很适合开发学习。随着Android 的越来越流行和完善,且市场上已经出现很多支持笔的压力感应的设备,可以更好的模拟自然绘画。 结合这些绘图软件面临的问题和他们的优势,使得基于 Android 移 动平台的易用的模拟自然绘画的绘图软件会有很好前景。1.2 论文主要内容根据所研究的内容,本文主要介绍一款基于 Android 的绘图软件开发过程:1. 从开源项目 MyPaint(一款画图软件)中提取出笔刷引擎(C 语言开发),分析其实现原理,将其改写成 java 版本,并使它 针对自己项目进行一些优化、改进、定制,以使其适 应自己项目的需求。选择选择
19、 Mypaint 的理由是,他支持丰富的模拟自然绘画的笔刷,且性能高,而且他的 库可以很好的支持笔的压力感应,能最大程度上模拟出自然绘画的效果。2. 提出一种 Android 底层模块开发方法,并利用此方法和 FFmpeg(开源视频编解码库)来进行用户绘画过程的录制,将其编码成 MP4 格式的视频文件。使用 FFmpeg 库的原因是它目前最主流的免费开源的视频编解码库,具有很好的跨平台性,支持 x86,arm 架构的处理器。3. 在上述工作基础上编写 Android 绘图软件界面程序,处理 Android 事件的响应逻辑,实现了 Android 平台上的绘图软件开发。1.3 本章小结本章主要介绍了 Android 绘图软件的研究背景和研究意义,并介绍了本论文的主要的工作内容。浙江大学硕士学位论文 第 2 章 Android 平台整体结构分析3章 2 章 Android 平台整体结构分析为了进行 Android 平台上的软件开发,就必须要对 Android 平台的架构和各大组建进行分析,本章会对 主要组件逐个进行分析。2.1 Android 系统架构Android 的系统架构采用了分层的架构,和其他大部分的系统类似,从底向上一共分了 4 层,每一层都把底 层实现封装,并暴露 调 用接口给上一层 3。Android 系统架构如图 2.