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