然后是在pc平台上有一些图像扭曲的应用(比如ps中的很多图像扭曲效果,虽然它并不开源,但我们至少可以模仿这些效果),所以这里虽然有一些挑战,但也给了我们很大的希望。
2) 经济可行性:android的开发成本是非常低的(这里主要是指硬件需求成本,至于开发代价成本以及一些其他的软成本这里不予讨论),只需要一个可以用的pc(配置的话,能用就可以)和一个android设备(几百块的android手机或者平板就行,模拟器不推荐使用,特别是window下的模拟器,而且如果做和硬件(像摄像头、蓝牙、各类感应器、gps等)有关开发不方便),所以这里完全没有问题。
2.5本章小结
本章主要讨论了该应用的功能需求,可行性等问题,经过对这些问题的详细探讨,有助于在接下来的设计和编码阶段有一个明确的目标,保证了设计过程顺利进行。
3 环境搭建
3.1 开发环境
3.1.1 环境搭建
3.1.1.1 安装配置JDK
JDK安装文件可以到sun官方oracle/technetwork/java/index.html下载并配置(这主要是因为android依赖java(Android SDK 依赖于.java -> .class -> .dex ),因为之前一直做java,这个过程已经很熟悉了,所以这里便不再 详细描述了)。
3.1.1.2 Android SDK的下载及配置
这里有两个选择:
1) 直接到developer.android/sdk/index.html下载Google绑定好的Android ADT Bundle,里面定制了eclipse(装了adt 插件)和Android sdk,很简单,直接下载下来,解压就可以了。
打开eclipse目录下eclipse.exe就可以直接开发,sdk目录下内容和你在 android开发页面下载的sdk内容一样。
2) 进入developer.android/tools/sdk/eclipse-adt.html,选择相应adt下载,然后安装到eclipse中,如下(和安装其他的eclipse插件过程一样)
这里找到刚才下载的adt解压包安装就可以了。安装完成之后preference下可 见Android选项;
Adt eclipse 插件安装完成后,接下来要下载sdk(Android开发工具包);
接下来在刚才的Android选项下制定sdk路径;Ok,安装完成。
这样环境就搭建好了(当然要用模拟器了,还需要创建Android虚拟机,sdk 包中右工具)。
(官网上有详细安装说明developer.android/sdk/installing/installing-adt.html)
3.1.2 开发环境
操作系统:Windows 8 中文版 64位操作系统
PC:联想y400笔记本
Android 设备:联想 a390t
JDK:Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
Android ADT Bundle: v22.3.0-887826
3.2 本章小结
本章主要讨论了在Android平台下开发哈哈镜应用的开发环境的搭建。
4系统设计
系统设计部分包括对概要设计和详细设计两部分。主要针对哈哈镜应用的模块层次结构,模块控制流程进行设计,这对之后的软件实施有着十分重要的参考性意义(虽然需求可能会有变动,而系统设计部分也可能有变动),这里会对之前的需求分析做进一步讨论验证并且详细讨论,软件功能模块在开发中的划分,会详细讨论每一个技术细节的理论实现方法。是之后软件实施过程的最主要的开发依据。
4.1概要设计
本部分主要讲述该哈哈镜应用的模块层次结构和模块控制流程。
4.1.1 总体功能模块
该系统实现了从图库加载图片或者从摄像头拍照得到图片,然后给图片添加相应效果(包括哈哈镜效果)。总体设计功能模块如图3-1所示。
图4-1 总体功能设计
图中各个模块的的功能描述如下:
1) 图片加载模块:主要负责将从应用的存放图片文件的目录里读取文件到应用中,当然还可以选择图库中的图片,或者使用摄像头拍照。
2) 图片编辑模块:主要负责呈现当前的图片和添加效果后的图片,并处理用户的选择图片事件和添加效果事件。
3) 摄像头拍照模块:通过android提供的Camera api 实现一个简单的拍照功能,并将拍到的照片加载到刚才的编辑页面。
4) 图库添加模块:直接通过调用系统图库来选择要编辑的图片。
5) 图片效果模块:提供为图片添加各种效果(哈哈镜效果)的算法。
4.1.2 用例图
用例图如图4-2所示。
图4-2 用例图
图中的参与者分别是用户和照片,其他的是一些用例,其中添加效果用例又包含很多个详细效果的用例;
4.1.3 时序图
以下是软件的时序图:
图4-3 时序图
该图主要描述对象之间发送消息的时间顺序显示多个对象之间的动态协作关系图,图中可以看见主要描述了Android activity (即view 类)之间的协作关系,与服务层的消息传递相对更频繁一些这里不便于画在图上,就是没添加一次效果都会有一次通信,还有图片的加载及编辑好的图片保存这里也没有画出(都不属于主要通信范畴)。
4.2 详细设计
在详细设计部分,将主要讲述应用的ui布局、事件处理以及图像扭曲效果算法。
4.2.1 UI设计
软件UI设计如图,从欢迎页面进去后会到主页面,主页面主要分为三个模块,分别是图片展示模块(imageview)、效果选择模块(gridview)、图片选择模块。然后可以通过点击拍照按钮(这里使用的是imageview,因为使用imagebutton会有边框)打开TakephotoActivity拍照编辑,或者通过打开图库按钮打开图库选择图片编辑。
图4-4 UI设计图
Welcome界面
界面如下:
图 4-5 Welcome界面
打开之后,首先进入欢迎界面,这是一个经过凸面化效果的android机器人logo和MigicMirror字样。
MainView界面
界面如下:
图 4-6 MainView界面
欢迎界面之后是相册软件的主界面,这部分布局分为三个主要部分 :效果选择模块、图片选择模块、和图像呈现模块。
点击打开图库的按钮,会进入选择图库界面:
图 4-7打开图库界面
在选择图库中的图片后,会把图片信息刷新到galleryview控件。
点击拍照按钮,会进入拍照的界面:
图 4-8拍照界面
拍照结束后,会直接把拍到的照片保存到应用在sd卡上建的目录下,并刷新到galleryview控件里。
点击左侧的效果,会为选中的图片添加效果:
图 4-9哈哈镜效果图
4.2.2图像扭曲效果设计
1. 不平滑放大滤镜效果设计
凸面化效果算法思想:
通过不平滑的放大某一区域使得产生哈哈镜效果,在如图所示圆形区域,从圆心沿着半径方向,做非平滑放大,这样就会产生一种哈哈镜效果(可见,B曲线是一个反函数,随着点逼近圆周,B会趋于数值ratio,而在圆心附近是B数值会非常大,所以圆心区域的扩展率很高,向外逐渐降低)
图 4-10非平滑放大示意图
凸面化效果算法核心代码:
......
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int curr_color = buf[j * width + i];
int pixR = Color.red(curr_color);
int pixG = Color.green(curr_color);
int pixB = Color.blue(curr_color);
int pixA = Color.alpha(curr_color);
double distance = Math.sqrt((i - originX) * (i - originX)
+ (j - originY) * (j - originY));
double real_radius = radius / ratio;
if (distance < radius) {
int src_x = (int) ((float) (i - originX) / ratio);
int src_y = (int) ((float) (j - originY) / ratio);
src_x = (int) (src_x * (distance / real_radius));
src_y = (int) (src_y * (distance / real_radius));
src_x = src_x + originX;
src_y = src_y + originY;
int new_color = buf[src_y * width + src_x];
......
可以看到,这里我们是通过目标图像中的像素点位置,反向求与它映射的源图像中的像素点,并把它拷贝到当
上一篇:
基于Android_智能手机的音乐播放器程序开发
下一篇:
试论APP广告在手机中的应用