现在的位置: 首页 > 综合 > 正文

Android图片变换对Camera与Matrix类的使用

2013年03月24日 ⁄ 综合 ⁄ 共 1114字 ⁄ 字号 评论关闭

  图片的移动、伸缩、旋转等,其实其本质上图片上各点坐标的变换,而为了表示这类坐标变换的规律,通过矩阵(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 则是沿各轴视角的变化。

  1.  camera.save();  
  2.         //绕X轴翻转  
  3.         camera.rotateX(-deltaY);  
  4.         //绕Y轴翻转  
  5.         camera.rotateY(deltaX);  
  6.         //设置camera作用矩阵  
  7.         camera.getMatrix(matrix);  
  8.         camera.restore();  
  9.         //设置翻转中心点  
  10.         matrix.preTranslate(-this.centerX, -this.centerY);  
  11.         matrix.postTranslate(this.centerX, this.centerY);  
  12.           
  13.         canvas.drawBitmap(showBmp, matrix, null);
     

这个是图片3D旋转的代码

3、

错切矩阵,所以setSkew中的参数不能太大,否则图形变形的历害。

链接

http://blog.csdn.net/webrobot/article/details/7359626 

http://hao3100590.iteye.com/blog/1270562

抱歉!评论已关闭.