您的位置:首页 > 移动开发 > Android开发

Android 使用Matrix进行图像变换

2010-11-25 18:33 302 查看
Android 使用Matrix进行图像变换
对图像的变换操作有translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种。Android里面的Matrix(android.graphics.Matrix,不是opgl.Matrix)提供了对应的四种操作的操作方法。其中对应每种操作都有三种接口setXX, preXX,postXX。setXX将使整个matrix的值为设置的值。preXX是将新的变换矩阵左乘原来的矩阵,而postXX是将新的变换矩阵右乘原来的变换矩阵。preXX的操作将在所有当前操作最后执行,而postXX的操作将在所有当前操作的最后执行。(这是因为设对给定的图像依次进行了基本变化F1、F2、F3…..、Fn,它们的变化矩阵分别为T1、T2、T3…..、Tn,图像复合变化的矩阵T可以表示为:T = TnTn-1…T1。)
下面介绍几个基本函数的用法:
setRotate(float degrees) :直接使图片旋转一定的角度,负数为向左旋转,正数为向右旋转。
setTranslate(float dx, float dy) 使图片平移
setScale(float sx, float sy) 使图片缩放
setSkew(float kx, float ky) 使图片倾斜
setRotate(float degrees, float px, float py) 使图片以某一点为中心旋转
reset() 是矩阵变为单位矩阵,即图片保持不变

对应上述的所有函数,都有相应的preXX和postXX版本,它们所对应的功能如上所述。下面是一个简单的例子。
setRotate(30,a,b)的功能是将图片以(a,b)为中心向右旋转30°。
下面可以用preXX来完成相应的功能:
matrix.setTranslate(a,b);
matrix.preRotate(30);
matrix.preTranslate(-a,-b);
从意义上来说可以理解为将图片平移(-a,-b),然后向右旋转30°,最后再将旋转后的图片平移(a,b)即可完成将图片以(a,b)向右旋转30°的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: