Matrix和Camera都可用于图片的处理,个人的理解Matrix侧重于平面效果,而Camera更像其名字一样(相机)可以对图片进行多维度(XYZ轴)的处理。
1、Matrix矩阵
Matrix是一个3×3的矩阵,主要是将矩阵分割为四部分,如下图所示:
比例旋转主要包括图像的Scale(缩放)、Skew(透视变换)、Rotate(旋转),平移主要是Translate,等比变换MPERSP_2=0.5,表示图片是原先的4倍大小,MPERSP_2=2,表示图片是原先的1/4大小。下面这个例子帮助我们更好的理解:
现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为△x,y方向的平移量为△y,那么,点P(x,y)的坐标为:
x = x0 + △x
y = y0 + △y
采用矩阵表达上述如下:
以上只是简单的介绍了Matrix的原理,至于要深入了解Matrix还要有深厚的数学功底,这里就不再讨论了。幸运的是Android为我们提供了现成的方法来处理图像。
Matrix提供了translate(平移)、rotate(旋转)、scale(缩放)、skew(倾斜)四种操作,这四种操作的内部实现过程都是通过matrix.setValues(…)来设置矩阵的值来达到变换图片的效果。
Matrix的每种操作都有set、pre、post三种操作,set是清空队列再添加,pre是在队列最前面插入,post是在队列最后面插入。
- matrix.preScale(2f,1f);
- matrix.preTranslate(5f, 0f);
- matrix.postScale(0.2f, 1f);
- matrix.postTranslate(0.5f, 0f);
上面的执行顺序是2—>1—>3—>4
2、Camera
Camera的坐标系是左手坐标系。如下图所示:
可以想象一下你手机平整的放在桌面上,X轴是手机的水平方向,Y轴是手机的竖直方向,Z轴是垂直于手机向里的那个方向。
下面是一些细节:
1、camera位于坐标点(0,0),也就是视图的左上角;
2、camera.translate(10,20,30)的意思是把观察物体右移10,上移20,向前移30(即让物体远离camera,这样物体将会变小);
3、camera.rotateX(45)的意思是绕X轴顺时针旋转45度。举例来说,如果物体中间线和X轴重合的话,绕X轴顺时针旋转45度就是指物体上半部分向里翻转,下半部分向外翻转;
4、camera.rotateY(45)的意思是绕Y轴顺时针旋转45度。举例来说,如果物体中间线和Y轴重合的话,绕Y轴顺时针旋转45度就是指物体左半部分向外翻转,右半部分向里翻转;
5、camera.rotateZ(45)的意思是绕Z轴逆时针旋转45度。举例来说,如果物体中间线和Z轴重合的话,绕Z轴顺时针旋转45度就是物体上半部分向左翻转,下半部分向右翻转。
本文参考了:http://blog.csdn.net/imyfriend/article/details/8045973