Android畫圖之Matrix(一) – Android移動開發技術文章_手機開發 Android移動開發教學課程

 

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的專欄

發佈留言