已完成:图片裁剪+图片旋转
题 目: |
图片编辑 |
系 别: |
信息工程系 |
专 业: |
软件工程 |
学生姓名: |
KALLER |
学 号: |
|
2020年 12月 22日
摘 要
随着社会的发展,经济水平的提高,手机越来越普及。同时伴随着已送慧联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。
由Google 公式牵头众多实力雄厚的软硬件厂商加盟商成立了OMS联盟,病退出的Android平台手机系统,作为时代的新生儿, Android 手机操作平台有得天独厚的优势广阔的发展前景。
而图片编辑工具作为现在人们日常生活中常用的一种工具也已经可以说是人们日常生活中必不可少的工具了。图片编辑工具的发展同样经历了漫长的过程,凝聚无数仙人的智慧,甚至连计算机的发展都可以说是源于计算器的发展。本程序正式基于Android 平台开发的图片编辑工具。
本课题要求:设计一个基于Android 的图片编辑工具。实现的功能有:
在程序中选择一张图片并对其进行编辑操作,选择方式有拍照和系统相册选择。暴击操作包括:1、裁剪图片,选择能够对图片进行自由裁剪,裁剪后可预览,可保存;2、旋转图片,能够对图片进行旋转,旋转角度包括自由旋转和固定90°旋转。
需重点研究和解决的问题:绘制高效率的GUI和响应动作。
关键词:Android;图片编辑;
Abstract
With the development of society and the improvement of economic level, mobile phones are becoming more and more popular. At the same time, with the development of the already-sent smart networking technology, the functions of mobile phones have become more and more abundant. From the original non-smart phone with simple communication function to the mobile phone operating system, in addition to the call function, it also integrates the functions of surfing the Internet, chatting, stock trading, sending and receiving emails and other functions.
Many powerful software and hardware vendors and franchisees have established the OMS Alliance led by the Google formula. The Android platform mobile phone system that has withdrawn from illness. As a newborn of the times, the Android mobile phone operating platform has unique advantages and broad development prospects.
As a tool commonly used in people's daily life, picture editing tools can be said to be an indispensable tool in people's daily life. The development of photo editing tools has also gone through a long process, condensing the wisdom of countless immortals, and even the development of computers can be said to be derived from the development of calculators. This program is officially based on a picture editing tool developed on the Android platform.
This subject requires: design an Android-based image editing tool. The realized functions are:
Select a picture in the program and edit it. The selection methods include photo and system album selection. Critical operations include: 1. Crop the picture, choose to freely crop the picture, preview and save after cropping; 2. Rotate the picture, be able to rotate the picture, the rotation angle includes free rotation and fixed 90° rotation.
Issues that need to be studied and resolved: drawing efficient GUI and response actions.
Keywords: Android; picture editing;
引言 1
1 系统概述 2
1.1 项目背景 2
1.2 项目需求 2
2 相关技术 3
2.1 Android平台介绍 3
2.2 系统研究方法 4
3 功能介绍 6
3.1 首页 6
3.1.1 组件-Banner 6
3.1.2 组件-按钮组 10
3.1.3 组件-图片选择器 12
3.2 功能-编辑图片 13
3.3 功能-旋转图片 15
3.3.1 WheelProgressBar 16
3.3.2 图片旋转原理 17
4 总结 18
4.1 首页Banner功能缺陷 18
4.2 图片裁剪功能缺陷 18
4.3 图片旋转功能缺陷 18
谢 辞 18
参考文献 20
引言
随着社会的发展,经济水平的提高,手机越来越普及。同时伴随着已送慧联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。
由Google 公式牵头众多实力雄厚的软硬件厂商加盟商成立了OMS联盟,病退出的Android平台手机系统,作为时代的新生儿, Android 手机操作平台有得天独厚的优势广阔的发展前景。
而图片编辑工具作为现在人们日常生活中常用的一种工具也已经可以说是人们日常生活中必不可少的工具了。图片编辑工具的发展同样经历了漫长的过程,凝聚无数仙人的智慧,甚至连计算机的发展都可以说是源于计算器的发展。本程序正式基于Android 平台开发的图片编辑工具。
本课题要求:设计一个基于Android 的图片编辑工具。实现的功能有:
在程序中选择一张图片并对其进行编辑操作,选择方式有拍照和系统相册选择。暴击操作包括:1、裁剪图片,选择能够对图片进行自由裁剪,裁剪后可预览,可保存;2、旋转图片,能够对图片进行旋转,旋转角度包括自由旋转和固定90°旋转。
本文将讨论以Android为运行平台,Android Studio为开发工具,Java为开发语言,探索研究出一种快速、稳定、安全、美观、高拓展的一款图片编辑工具。
随着社会的发展,经济水平的提高,手机越来越普及。同时伴随着移动互联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。
Java 语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应
用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴
近自然的语义,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握嵌入式系统以及Java 语言的重要概念及其面向对象的特性,使我们能够熟练的应用面向对象的思想和设计方法解决实际问题的能力。
通过此次课程设计,巩固所学Java 语言基本知识,增进Java 语言编辑基本
功,掌握JDK、Android Stuido 、AVD、ADB等开发工具的运用,拓宽常用类
库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,
全面掌握Java 语言的编程思想及面向对象程序设计的方法,为今后从事实际工
作打下坚实的基础。
根据需求,符合用户的实际要求,系统应实现以下功能:图片编辑工具界面友好,方便使用,具有基本图片裁剪、图片旋转等功能,能够预览和储存下用户编辑的图片。如图1-1所示。
整个程序基于Android系统开发,除总体模块外主要分为输入模块、显示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算机模块部分负责进行数据的运算以及一些其他的功能。下面较为详细的做了说明。具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时负责显示一些其他的信息。
计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除等各种功能,记忆数据的相关功能,退格以及清零的功能。系统除了总体模块以外主要由三大模块来组成,即输入模块、显示模块和计算模块,如图2-2所示:
输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机按键动作以及用指针事件处理方法处理触屏的单击动作(以松开按键为准)。同时提供了较为直观的键盘图形用户界面。显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时还负责显示一些其他的信息。计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除、等各种计算功能,记忆数据的相关功能,退格以及清零的功能。
Android是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。可以把它简单理解成Linux上套了一个JAVA的壳。Android的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金。Android的程序可以采用JAVA开发,因为它的虚拟机(VirtualMachine)Dalvik,只是它将JAVA的bytecode转成自己的格式,回避掉需要付给SUN有关JAVA的授权费用。因此,Android开发环境是需要JDK的。1.新建项目:打开Android Studio,选择File>New>New Project,选择Empty Activity,如图2-1所示。点击Next,进入信息填写页面,填写项目名称,如图2-2所示。
图2-1 新建项目选择Activity模版
图2-2 填写项目名称
系统研究方法采用迭代模型开展活动。
迭代模型是RUP推荐的周期模型。被定义为:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和使用该发布必需的所有其他外围元素。也就是对产品开发的每个活动、阶段或子阶段进行迭代。
RUP中的软件生命周期在时间上被分解为四个顺序的阶段,分别是:初始阶段(Inception)、细化阶段(Elaboration)、构造阶段(Construction)和交付阶段(Transition)。每个阶段结束于一个主要的里程碑(Major Milestones);每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。
(1)初始阶段
初始阶段的目标是为系统建立商业案例并确定项目的边界。为了达到该目的必须识别所有与系统交互的外部实体,在较高层次上定义交互的特性。本阶段具有非常重要的意义,在这个阶段中所关注的是整个项目进行中的业务和需求方面的主要风险。对于建立在原有系统基础上的开发项目来讲,初始阶段可能很短。初始阶段结束时是第一个重要的里程碑:生命周期目标(Lifecycle Objective)里程碑。生命周期目标里程碑评价项目基本的生存能力。
(2)细化阶段
细化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。为了达到该目的,必须在理解整个系统的基础上,对体系结构做出决策,包括其范围、主要功能和诸如性能等非功能需求。同时为项目建立支持环境,包括创建开发案例,创建模板、准则并准备工具。细化阶段结束时第二个重要的里程碑:生命周期结构(LifecycleArchitecture)里程碑。生命周期结构里程碑为系统的结构建立了管理基准并使项目小组能够在构建阶段中进行衡量。此刻,要检验详细的系统目标和范围、结构的选择以及主要风险的解决方案。
(3)构造阶段
在构造阶段,所有剩余的构件和应用程序功能被开发并集成为产品,所有的功能被详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。构建阶段结束时是第三个重要的里程碑:初始功能(Initial Operational)里程碑。初始功能里程碑决定了产品是否可以在测试环境中进行部署。此刻,要确定软件、环境、用户是否可以开始系统的运作。此时的产品版本也常被称为“beta”版。
(4)交付阶段
交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。在生命周期的这一点上,用户反馈应主要集中在产品调整,设置、安装和可用性问题,所有主要的结构问题应该已经在项目生命周期的早期阶段解决了。在交付阶段的终点是第四个里程碑:产品发布(Product Release)里程碑。此时,要确定目标是否实现,是否应该开始另一个开发周期。在一些情况下这个里程碑可能与下一个周期的初始阶段的结束重合。
(5)迭代模型与瀑布模型对照
一个开发迭代在某种意义上是在所有工作流中的一次完整的经过,这些工作流至少包括:需求工作流、分析和设计工作流、实现工作流、测试工作流。其本身就像一个小型的瀑布项目。
与传统的瀑布模型相比较,迭代过程具有以下优点:
① 降低了在一个增量上的开支风险。如果开发人员重复某个迭代开发,那么损失只是这一个开发有误的迭代的花费。
② 降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。
③ 加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率。
④ 由于用户的需求并不能在一开始就做出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。
首页由标题栏、Banner和按钮组构成。
图3-1 首页布局图
Banner是继承ViewGroup出来的,在本项目中名为“HomeViewPager”。
图3-2 HomeViewPager类图
Banner允许滑动,并且滑动过程有放大缩放特效,见图3-3。
图3-3 Banner滑动效果
静止状态下,左边和右边View分别在露出自己的右侧和左侧,以此给予用户左右是否存在卡片View的提示。在这里我们对这些卡片进行如下的定义:
相对位置:左(LEFT)、中(CENTER)、右(RIGHT)。
卡片宽度:相对位置为CENTER的卡片宽度是屏幕宽度的0.8倍。相对位置为左和右的卡片宽度是相对位置为CENTER的卡片宽度0.8倍。
卡片高度:自身宽度*图片高宽比。
放大与缩放:当一个卡片从LEFT或RIGHT的相对位置,到达CENTER的过程中,将会从0.64的比例放大到0.8的比例。反之,即为缩放。
见图3-4、3-5、3-6。
图3-4 Position达到最后一张卡片时
图3-5 Position在非起点非终点时
图3-6 Position落在第一张卡片时
按钮组使用RecyclerView。
图3-7 HomeButtonsAdapter类图
图3-8 Adapter-Item-XML
实现Item按下特效:
1.使用ColorMatrixColorFilter对ImageView进行颜色过滤。
2.修改TextViewColor。
图片选择器,使用的PopupWindow组件,可向上弹出。
图3-9 Home_popup.xml
图3-10 向上弹出实际图
图3-11 SelectPicturePopupWindow类图
进入方式:在主页-按钮组中,点击“裁剪图片”按钮,可进入图片裁剪的界面。
图3-12 图片裁剪的流程图
在主页-按钮组中,点击“旋转图片”按钮,可进入图片旋转的操作界面。旋转图片的流程和操作方法,见图3-13。
图3-13 图片裁剪的流程图
图3-14 旋转图片界面的布局图和实际图
WheelProgressBar继承View来自定义一个新的组件。使用画笔(Paint),来绘制竖条。为了达到无限滑动的效果,使用了无限扩展组件宽度的方式,即滑动到未绘制的位置时开始画图,见图3-15。
图3-15 WheelProgressBar类图
在本项目总图片的旋转采用的是Matrix(android.graphics.Matrix)类中的Rotate设置进行的旋转。在达到旋转角度后,再将Matrix实体转换为Bitmap并储存到磁盘。
1、数据储存:对于一个成熟的工具,应当具有本地数据库储存和远程服务器储存,两种储存站点。在每次成功请求到远程数据时,应当储存到本地数据库,以便下次在没有网络的情况下,加载本地数据,提高用户体验。
2、效率:目前Banner的滑动已实现了放大缩小,但在使用可以发现其绘图的准确率和速度远达不到商业化标准。
3、弹性效果:从重视用户体验的角度出发,在滑动到左右极限时,应当给予一定量的弹性滑动效果。
4、自动定位:这个Banner还没有根据当前X轴位置自动定位到卡片。
5、自动翻页:当用户的触摸焦点离开Banner时,应自动翻Banner的卡片。
6、移动左右卡片实现无限滑动:当用户即将达到最后或最前的卡片页面时,应当自动移动出某一卡片,类似于环状模型,提交用户体验。该条内容与该目录第3条内容互斥。
1、固定比例模式:该工具已实现了自由裁剪功能,应当添加其他模式,用于用户快捷裁剪出生活常用比例。例如:身份在比例、一寸二寸照片尺寸、4:3、16:9等等。
2、提高裁剪精度:对于一款成熟的图片编辑工具来说,在用户编辑图片时,应当提供图片放大和放大时编辑的功能,以提高裁剪精度。
1、预览保存时旋转精度有待提高:该工具使用Matrix类进行的图片旋转,但该类实现的效果不佳,精度不够高。
2、提高放大功能:对于一款成熟的图片编辑工具来说,在用户编辑图片时,应当提供图片放大和放大时编辑的功能。
本项目部分源码来自网络