图片的移动、伸缩、旋转等,其实其本质上图片上各点坐标的变换,而为了表示这类坐标变换的规律,通过矩阵(Matrix)的描述是最为方便,清晰的。
在Android的开发过程中,常常会碰到对于图片的处理,而使用matrix的关于translate,scale,skew等的方法,如何理解呢?
先了解一下矩阵的基本知识http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html
以下为个人的一些总结
1、pre set post 的区别
如果使用setRotation(),那么目前的矩阵数据就是中间那个。如果再matrix.preTranslate(-xp,-yp),则表示第三个矩阵,而使用matrix.postTranslate(xp,yp)刚表示后一个矩阵。
总的意思表于先将图片移动到原点,然后绕原点旋转度,最后移回来。我们都知道矩阵是不满足交换律的,所以pre表示先乘即式子中的右乘,而post表球后乘,即表示式子中的左乘。
2、Camera中的rotateX,rotateY,rotateZ,Translate
Camera主要是实现绕轴旋转,在这里我们可以理解为视角变换,其中旋转原点为(0,0)点,x轴沿屏幕最上方向右,y轴屏幕最左边向上。而Translate 则是沿各轴视角的变化。
- camera.save();
- //绕X轴翻转
- camera.rotateX(-deltaY);
- //绕Y轴翻转
- camera.rotateY(deltaX);
- //设置camera作用矩阵
- camera.getMatrix(matrix);
- camera.restore();
- //设置翻转中心点
- matrix.preTranslate(-this.centerX, -this.centerY);
- matrix.postTranslate(this.centerX, this.centerY);
-
canvas.drawBitmap(showBmp, matrix, null);
这个是图片3D旋转的代码
3、
错切矩阵,所以setSkew中的参数不能太大,否则图形变形的历害。
链接