当前位置:操作系统 > 安卓/Android >>

Android画图之Matrix(一)

 

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

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

 

\

 

 

 

        在Android 里面,Matrix 由9 个float 值构成,是一个3*3 的矩阵。如下图。

   \       

 

 

没专业工具,画的挺难看。解释一下,上面的sinX 和cosX ,表示旋转角度的cos 值和sin 值,注意,旋转角度是按顺时针方向计算的。translateX 和translateY 表示x 和y 的平移量。scale 是缩放的比例,1 是不变,2 是表示缩放1/2 ,这样子。

 

        下面在Android 上试试Matrix 的效果。

 

Java代码 

public class MyView extends View {  

 

    private Bitmap mBitmap;  

 

    private Matrix mMatrix = new Matrix();  

 

    public MyView(Context context) {  

 

        super(context);  

 

        initialize();  

 

    }  

 

    private void initialize() {       

 

        mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();          

 

        float cosValue = (float) Math.cos(-Math.PI/6);  

 

        float sinValue = (float) Math.sin(-Math.PI/6);  

 

        mMatrix.setValues(  

 

                new float[]{  

 

                        cosValue, -sinValue, 100,  

 

                        sinValue, cosValue, 100,  

 

                        0, 0, 2});  

 

    }  

 

    @Override protected void onDraw(Canvas canvas) {  

 

//      super.onDraw(canvas);  //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。  

 

        canvas.drawBitmap(mBitmap, mMatrix, null);  

 

    }  

 

 

 运行结果如下:

\

 

 

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

 

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

 

这里讲的直接赋值的方式也许有点不好理解,不过还好,andrid 提供了对矩阵的更方便的方法,下一篇介绍


摘自 zhoujiyu123的专栏
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,