博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像的平移、旋转及缩放
阅读量:4606 次
发布时间:2019-06-09

本文共 1869 字,大约阅读时间需要 6 分钟。

  Android中,项目目录下的res\drawable用来放置该项目的图片资源。

  Android中提供了Bitmap类来获取图像文件信息,进行图像的平移、旋转及缩放等操作,并可以指定格式保存图像文件。

1.图像绘制

  在绘制图像之前,需要从项目目录下的res\drawable中获取所需的图片资源。我们可以通过资源索引来获得该图像对象Bitmap。具体方法如下(在项目目录下的res\drawable中放置了一张名为fuwa.png的图片):

  mBitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.fuwa)).getBitmap():

  其中,getResources()方法的作用是取得资源对象;getDrawable()方法的作用取得资源中的Drawable对象,参数为资源索引idgetBitmap()方法的作用是得到Bitmap对象。

  获得图像资源后,可以使用drawBitmap()方法将图像显示到屏幕的(x,y)坐标位置上,具体方法如下:

  Canvas.drawBitmap(mBitmap, x, y, null);

  此外,要获得图像的信息,可以通过mBitmap.getHight()方法获得该图像的高度,通过mBitmap.getWidth()f方法获得该图像的宽度。

2.图像的平移

  由图像的绘制方法,我们知道使用Canvas.drawBitmap(mBitmap, x, y, null)方法可以将图像绘制到屏幕的(x,y)坐标位置上。

所以,要实现图像的平移,只需要改变图像绘制到屏幕上的(x,y)坐标位置即可。

3.图像的旋转

  在Android中,可以使用Matrix来进行图像旋转,Matrix是一个3*3的矩阵,专门用于图像变换匹配。Matrix没有结构体,必须被初始化,可以通过reset()set()方法来实现,如下:

  mMatrix.reset();

  初始化之后就可以通过setRotate()方法来设置想要的旋转角度,如下:

  mMatrix.setRotate();

  旋转角度设置完毕后,可以使用creatBitmap()方法创建一个经过旋转处理的Bitmap对象,方法如下:

  mBitmapRotate = Bitmap.creatBitmap(mBitmap, 0, 0, mBitmapWidth, mBitmapHight, mMatrix, true);

  最后,将该Bitmap对象绘制到屏幕上,便实现了图像旋转的操作。 

4.图像的缩放

  在Android中,同样可以使用Matrix来实现图像的缩放。使用MatrixpostScale()方法来设置图像缩放的倍数,如下:

  mMatrix.postScale();

  缩放倍数设置完毕后,同样需要使用creatBitmap()方法创建一个经过缩放处理的Bitmap对象。最后,将该Bitmap对象绘制到屏幕上,便实现了图像缩放的操作。

5.使用线程更新界面

  要达到在界面中实时的看到图像的旋转、缩放等效果,可以使用线程处理。在线程处理中加入postInvalidate()方法来实现。如下:

线程处理

6.实例

  本实例中,定义了4个变量mBitmapToLeftmBitmapToTopmAngle以及mScale。变量mBitmapToLeft表示图像到屏幕左边界的距离,mBitmapToTop表示图像到屏幕顶端的距离,mAngle表示图像旋转的角度,mScale表示图像缩放的倍数。

  通过上下左右四个按键可以实现图片的上下左右平行移动,通过menuback按键可以控制图像的旋转角度,通过音量加减按键可以控制图像缩放的倍数。

  在线程中处理这些操作,并调用postInvalidate()方法已到达实时刷新界面的目的。

  实例源码如下:

MyView.java源码

   该实例原始图像效果如图1所示:

图1 原始图像效果

  经过平移旋转及缩放后的效果如图2所示:

图2 经过平移旋转及缩放后的效果

 

 

 

相关资料:

Android图像处理之Bitmap类:

 Android图片处理(MatrixColorMatrix):

 

转载于:https://www.cnblogs.com/hudabing/archive/2013/05/15/3079544.html

你可能感兴趣的文章
zstu.4189: 逻辑运算(构建 && 前缀表达式入门)
查看>>
iOS中常见的自定义宏
查看>>
Android中Context详解 ---- 你所不知道的Context
查看>>
8.存储过程和触发器
查看>>
NOIP模拟题——LGTB与桌子
查看>>
64位Navicat Premium安装/破解【含资源】
查看>>
事件查看器常见ID代码解释
查看>>
使用mdf和ldf附加还原SQL Server数据文件
查看>>
python函数
查看>>
Python美味食谱:1.7 将字符串逐字符或逐词反转
查看>>
LeetCode:Divide Two Integers
查看>>
ubuntu mysql INTO FILE 权限问题
查看>>
CentOs7-常用命令
查看>>
hdu1061
查看>>
查看Sql Server所有表占用的空间大小
查看>>
CSS重置(css reset)【转载】
查看>>
Elasticserach 配置文件详解
查看>>
NTCIR-13 We Want Web 任务概述
查看>>
模版include的用法
查看>>
LotusScript_导出数据库路径和名称
查看>>