天天看點

Android 開發之Matrix圖檔處理類的使用

在Android中,對圖檔的處理需要使用到Matrix類,Matrix是一個3 x 3的矩陣,他對圖檔的處理分為四個基本類型:

1、Translate————平移變換

2、Scale————縮放變換

3、Rotate————旋轉變換

4、Skew————錯切變換

在Android的API裡對于每一種變換都提供了三種操作方式:set(用于設定Matrix中的值)、post(後乘,根據矩陣的原理,相當于左乘)、pre(先乘,相當于矩陣中的右乘)。預設時,這四種變換都是圍繞(0,0)點變換的,當然可以自定義圍繞的中心點,通常圍繞中心點。

首先說說平移,在對圖檔處理的過程中,最常用的就是對圖檔進行平移操作,該方法為setTranslate(),平移意味着在x軸和y軸上簡單地移動圖像。setTranslate方法采用兩個浮點數作為參數,表示在每個軸上移動的數量。第一個參數是圖像将在x軸上移動的數量,而第二個參數是圖像将在y軸上移動的數量。在x軸上使用正數進行平移将向右移動圖像,而使用負數将向左移動圖像。在y軸上使用正數進行平移将向下移動圖像,而使用負數将向上移動圖像。

再看縮放,Matrix類中另一個有用的方法是setScale方法。它采用兩個浮點數作為參數,分别表示在每個軸上所産生的縮放量。第一個參數是x軸的縮放比例,而第二個參數是y軸的縮放比例。如:matrix.setScale(1.5f,1);

比較複雜的就是圖檔的旋轉了,内置的方法之一是setRotate方法。它采用一個浮點數表示旋轉的角度。圍繞預設點(0,0),正數将順時針旋轉圖像,而負數将逆時針旋轉圖像,其中預設點是圖像的左上角,如:

  

另外,也可以使用旋轉的角度及圍繞的旋轉點作為參數調用setRotate方法。選擇圖像的中心點作為旋轉點,如:

對于錯切變換,在數學上又稱為Shear mapping(可譯為“剪切變換”)或者Transvection(縮并),它是一種比較特殊的線性變換。錯切變換的效果就是讓所有點的x坐标(或者y坐标)保持不變,而對應的y坐标(或者x坐标)則按比例發生平移,且平移的大小和該點到x軸(或y軸)的垂直距離成正比。錯切變換,屬于等面積變換,即一個形狀在錯切變換的前後,其面積是相等的。

對于程式中,一個特别有用的方法對是setScale和postTranslate,它們允許跨單個軸(或者兩個軸)翻轉圖像。如果以一個負數縮放,那麼會将該圖像繪制到坐标系統的負值空間。由于(0,0)點位于左上角,使用x軸上的負數會導緻向左繪制圖像。是以我們需要使用postTranslate方法,将圖像向右移動,如:

可以在y軸上做同樣的事情,翻轉圖像以使其倒置。通過将圖像圍繞兩個軸上的中心點旋轉180°,可以實作相同的效果,如

繼續閱讀