正如在圖3-6中所看到的那樣,這會(huì)導(dǎo)致圖像傾斜。它是因?yàn)榈谝恍袛?shù)字而傾斜,其操作每個(gè)像素的x值,根據(jù)每個(gè)像素的y值進(jìn)行改變。隨著y值增加,因?yàn)橄驁D像的下部移動(dòng),所以x值增加,從而導(dǎo)致圖像傾斜。如果使用一個(gè)負(fù)值,那么圖像將以相反的方向傾斜。同時(shí),還將注意到該圖像由于坐標(biāo)變化而被截?cái)?。因此,如果要?zhí)行這樣的操作,那么需要增加結(jié)果位圖的大小,如圖3-7所示。
alteredBitmap = Bitmap.createBitmap(bmp.getWidth()*2,bmp.getHeight(),
bmp.getConfig());
圖3-7 應(yīng)用相同的自定義矩陣后顯示的第二幅圖像,但采用更大的寬度以使圖像不會(huì)被截?cái)?/p>
這些矩陣轉(zhuǎn)換非常強(qiáng)大;同時(shí)我們也會(huì)發(fā)現(xiàn)手動(dòng)處理它們會(huì)很麻煩。但是,對(duì)于大部分想要通過手動(dòng)處理矩陣而實(shí)現(xiàn)的工作,它們對(duì)應(yīng)的公式所需要的數(shù)學(xué)知識(shí)超出了本書的范圍。然而,如果有興趣深入學(xué)習(xí),那么網(wǎng)上有足夠多的資源。一個(gè)好的起點(diǎn)是Wikipedia的Transformation Matrix(轉(zhuǎn)換矩陣)文章:http://en.wikipedia.org/wiki/Transformation_matrix。
3.3.2 Matrix類的方法
然而,現(xiàn)在要做的是探索Matrix類的其他方法,因?yàn)樗鼈儙椭覀兺瓿闪舜蟛糠窒胍瓿傻墓ぷ?,而無須重新學(xué)習(xí)高中和大學(xué)數(shù)學(xué)課程。
與自己創(chuàng)建Matrix對(duì)象中的數(shù)字不同,針對(duì)想要使用的轉(zhuǎn)換,可以簡(jiǎn)單地調(diào)用相應(yīng)的方法。
下述的每個(gè)代碼片段都可以替換“在位圖上繪制位圖”示例中的canvas.drawBitmap代碼行。
1. 旋轉(zhuǎn)
內(nèi)置的方法之一是setRotate方法。它采用一個(gè)浮點(diǎn)數(shù)表示旋轉(zhuǎn)的角度。圍繞默認(rèn)點(diǎn)(0,0),正數(shù)將順時(shí)針旋轉(zhuǎn)圖像,而負(fù)數(shù)將逆時(shí)針旋轉(zhuǎn)圖像,其中默認(rèn)點(diǎn)是圖像的左上角,如圖3-8所示。