实验三. 图形图像处理——图形特效
实验目的
- 掌握Android系统中使用Matrix类实现旋转、缩放和平移;
- 掌握Android系统中使用Shader类渲染属性;
实验环境
- 硬件:CBT-EMB-MIP 实验平台,PC机;
- 软件:Android Studio;
实验内容
学习Matrix类和Shader类的使用。
实验原理
使用Matrix实现旋转、缩放和平移
在 Android图形API中提供了一个Matrix矩形类,该类具有一个33的矩阵坐标。通过该类可以实现图形的旋转、平移和缩放。该类的详细方法如*表4.1 所示。
方法名称 | 方法描述 |
---|---|
reset() | 重置一个Matrix对象 |
set(Matrix src) | 复制一个源矩阵 |
setRotate(float degress) | 指定一个角度以(0,0)为坐标进行旋转 |
setRotate(float degress ,float px,float py) | 指定一个角度以(px,py)为坐标进行旋转 |
setScale(float sx,float sy) | 缩放处理 |
setScale(float sx,float sy,float px,float py) | 以(px , py)进行缩放 |
setTranslate(float dx,float dy) | 平移 |
setSkew(float kx,float ky) | 倾斜处理 |
setSkew(float kx,float ky,float px,float py) | 以(px,py)为坐标进行倾斜处理 |
表4.1 Matrix常用方法
接下来我们会通过一个实例演示Matrix的具体应用,在本实例中我们自定义一个View 类,在该类中拥有一个Bitmap和Matrix实例,Bitmap实例从系统资源加载一张图片,覆盖 View类的onDraw()方法,在该方法中通过reset()方法初始化Matrix,并设置其旋转或缩放属性,使用Canvas的drawBitmap()方法将Bitmap重新绘制在视图中。通过键盘事件onKeyDown()实现旋转属性和缩放属性的改变,调用postInvalidate()方法重新绘制 Bitmap。
使用Shader类渲染属性
经常会看到一些屏保或者音乐播放器的界面中有一些非常绚丽的图形,这些其实是在一些原有图形的基础上进行渲染的结果。Android系统中提供了Shader渲染类来实现这一功能。Shader是一个抽象父类,其子类有很多个,如BitmapShader(位图渲染)、ComposeShader(混合渲染)、LinearGradient(线性渲染)、RadialGradient(光束渲染)和 SweepGradient(梯度渲染)等。通过Paint对象的 paint.setShader(shader)方法来使用Shader。
实验步骤
使用Matrix实现旋转、缩放和平移
- 打开Android Studio,从菜单栏选择 File > Open。
- 弹窗中浏览选择光盘src目录下的Gradle工程 CH03_SDK ,点击OK导入。
- 等待工程构建完成后,在工具栏中的Android App列表中选择本实验例程CH03_03_MatrixDemo,点击运行。
- 单击各类型按钮,图片会做相应的变化,运行界面如图所示:
图5.1.1 图片放大
图5.1.2 图片缩小
图5.1.3 向右旋转
图5.1.4 向左旋转
使用Shader类渲染属性
- 在工具栏中的Android App列表中选择本实验例程CH03_03_ShaderDraw,点击运行。
- 单击不同的渲染方式按钮,可以得到不同类型的渲染效果,在这里只列出其中几种效果如图所示,读者可运行源码去测试其他的效果;
图5.2.1 位图渲染
图5.2.2 线性渲染
图5.2.3 梯度渲染
图5.2.4 光束渲染