<a href="http://www.cnblogs.com/plokmju/">承香墨影</a>
前言
本篇部落客要講解一下如何處理對一個Bitmap對象進行處理,包括:縮放、旋轉、位移、傾斜等。在最後将以一個簡單的Demo來示範圖檔特效的變換。
本篇部落格的主要内容:
<a href="http://www.cnblogs.com/plokmju/p/android_Matrix.html#Matrix">Matrix</a>
<a href="http://www.cnblogs.com/plokmju/p/android_Matrix.html#MatrixScale">Matrix縮放</a>
<a href="http://www.cnblogs.com/plokmju/p/android_Matrix.html#MatrixRotate">Matrix旋轉</a>
<a href="http://www.cnblogs.com/plokmju/p/android_Matrix.html#MatrixTranslate">Matrix位移</a>
<a href="http://www.cnblogs.com/plokmju/p/android_Matrix.html#MatrixSkew">Matrix傾斜</a>
<a href="http://www.cnblogs.com/plokmju/p/android_Matrix.html#MatrixNotice">Matrix變換注意事項</a>
<a href="http://www.cnblogs.com/plokmju/p/android_Matrix.html#MatrixAllDemo">Matrix完整的Demo</a>
對于一個圖檔變換的處理,需要Matrix類的支援,它位于"android.graphics.Matrix"包下,是Android提供的一個矩陣工具類,它本身不能對圖像或View進行變換,但它可與其他API結合來控制圖形、View的變換,如Canvas。
Matrix提供了一些方法來控制圖檔變換:
setTranslate(float dx,float dy):控制Matrix進行位移。
setSkew(float kx,float ky):控制Matrix進行傾斜,kx、ky為X、Y方向上的比例。
setSkew(float kx,float ky,float px,float py):控制Matrix以px、py為軸心進行傾斜,kx、ky為X、Y方向上的傾斜比例。
setRotate(float degrees):控制Matrix進行depress角度的旋轉,軸心為(0,0)。
setRotate(float degrees,float px,float py):控制Matrix進行depress角度的旋轉,軸心為(px,py)。
setScale(float sx,float sy):設定Matrix進行縮放,sx、sy為X、Y方向上的縮放比例。
setScale(float sx,float sy,float px,float py):設定Matrix以(px,py)為軸心進行縮放,sx、sy為X、Y方向上的縮放比例。
之前有提過,圖檔在記憶體中存放的就是一個一個的像素點,而對于圖檔的變換主要是處理圖檔的每個像素點,對每個像素點進行相應的變換,即可完成對圖像的變換。上面已經列舉了Matrix進行變換的常用方法,下面以幾個Demo來講解一下如何通過Matrix進行變換。
代碼:
<a></a>
效果展示:
上面幾個小方法示範了如何使用Matrix進行變換,但是還有幾點需要額外注意一下:
對于一個從BitmapFactory.decodeXxx()方法加載的Bitmap對象而言,它是一個隻讀的,無法對其進行處理,必須使用Bitmap.createBitmap()方法重新建立一個Bitmap對象的拷貝,才可以對拷貝的Bitmap進行處理。
因為圖像的變換是針對每一個像素點的,是以有些變換可能發生像素點的丢失,這裡需要使用Paint.setAnitiAlias(boolean)設定來消除鋸齒,這樣圖檔變換後的效果會好很多。
在重新建立一個Bitmap對象的拷貝的時候,需要注意它的寬高,如果設定不妥,很可能變換後的像素點已經移動到"圖檔之外"去了。
下面給出本篇部落格講解的使用Matrix的完整Demo代碼。
布局代碼:
實作代碼:
本文轉自 一點點征服 部落格園部落格,原文連結:http://www.cnblogs.com/ldq2016/p/5396562.html,如需轉載請自行聯系原作者