一個特別有用的方法對是setScale和postTranslate,它們允許跨單個軸(或者兩個軸)翻轉圖像。如果以一個負數(shù)縮放,那么會將該圖像繪制到坐標系統(tǒng)的負值空間。由于(0,0)點位于左上角,使用x軸上的負數(shù)會導致向左繪制圖像。因此我們需要使用postTranslate方法,將圖像向右移動,如圖3-12所示。
matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(),0);
6. 翻轉
可以在y軸上做同樣的事情,翻轉圖像以使其倒置。通過將圖像圍繞兩個軸上的中心點旋轉180°,可以實現(xiàn)相同的效果,如圖3-13所示。
matrix.setScale(1, -1);
matrix.postTranslate(0, bmp.getHeight());
7. 繪制替代圖像
在之前的小節(jié)中,所使用方法的缺點之一是圖像會被截斷,因為沒有計算轉換后的結果大小,僅僅以預先確定的大小繪制到一個位圖對象中。
解決這個問題的方法之一是:當初次創(chuàng)建位圖對象時,應用Matrix對象而不是繪制到一個空的位圖對象中。
通過這種方式,將無須再獲得Canvas和Paint對象。缺點是不能繼續(xù)更改位圖對象,因為如果想要對其進行任何轉換,那么都需要重新創(chuàng)建它。
在Bitmap類中存在一個靜態(tài)方法createBitmap能夠實現(xiàn)以上功能。第一個參數(shù)是源位圖對象,接下來的參數(shù)分別是來自源圖像的初始的x、y、寬度和高度值,隨后是所應用的Matrix對象,最后是一個布爾值,表示是否在圖像上應用某種過濾器。由于沒有應用包含過濾器的矩陣(將在本章后面討論),將其設置為false。