

关于Android中Matrix和Camera的简单用法总结
source link: https://www.longdw.com/2012/11/22/matrix-camera-android/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

关于Android中Matrix和Camera的简单用法总结
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
分类Android
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK