HardBirch

Android自定义View之二:Matrix初探(懒了,使用拿来主义了)

时间:11-04-11 栏目:安卓学习笔记 作者:张飞不张,文采横飞 评论:1 点击: 1,650 次

原文地址:http://java-admin.iteye.com/blog/792217

 

Matrix


,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。

       

首先介绍一下矩阵运算。加法和减法就不用说了,太简单了,对应位相加就好。图像处理,主要用到的是乘法
。下面是一个乘法的公式:

矩阵相乘示例

 


Android
里面,
Matrix

9

float
值构成,是一个
3*3
的矩阵。如下图。

 

Android中Matrix矩阵

 

没专业工具,画的挺难看。解释一下,上面的
sinX

cosX
,表示旋转角度的
cos
值和
sin
值,注意,旋转角度是按顺时针方向计算的。
translateX

translateY
表示
x

y
的平移量。
scale
是缩放的比例,
1
是不变,
2
是表示缩放
1/2
,这样子。

 



 

运行结果如下:

运行结果

 

以左上角为顶点,缩放一半,逆时针旋转30度,然后沿x轴和y轴分别平移50个像素,代码 里面写的是100,为什么是平移50呢,因为缩放了一半。

       大家可以自己设置一下Matrix的值,或者尝试一下两个Matrix相乘,得到的值设置进去,这样才能对Matrix更加熟练。

这里讲的直接赋值的方式也许有点不好理解,不过还好,
andrid

提供了对矩阵的更方便的方法

 

Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在

Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。

    set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。

    post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。例如,要将一个图片旋

转30度,然后平移到(100,100)的地方,那么可以这样做:

 


这样就达到了想要的效果。

    pre是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。例如上面的例子,如果用pre的话

,就要这样:


 

旋转、缩放和倾斜都可以围绕一个中心点来进行,如果不指定,默认情况下,是围绕(0,0)点来进行。

 


 

运行结果

 


Android自定义View之二:Matrix初探(懒了,使用拿来主义了):目前有1 条留言

  1. 沙发
    flyingsir_zw:

    看不到图?

    2011-12-28 17:25 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐