正文

基本的圖像縮放和旋轉(zhuǎn)(1)

Android多媒體開(kāi)發(fā)高級(jí)編程 作者:(美)艾佛瑞


Android API有一個(gè)Matrix(矩陣)類,當(dāng)在現(xiàn)有位圖對(duì)象上進(jìn)行繪制或從另一個(gè)位圖對(duì)象創(chuàng)建某個(gè)位圖對(duì)象時(shí),可以使用該類。這個(gè)類使得我們能夠在一幅圖像上應(yīng)用空間轉(zhuǎn)換。這種類型的轉(zhuǎn)換可以是旋轉(zhuǎn)、裁剪、縮放或者更改圖像的坐標(biāo)空間。

Matrix類以9個(gè)數(shù)字的數(shù)組表示轉(zhuǎn)換。在許多情況下,這些數(shù)字可以由一個(gè)公式生成,該公式在數(shù)學(xué)上表示應(yīng)該發(fā)生的轉(zhuǎn)換。例如,對(duì)于旋轉(zhuǎn)公式,通過(guò)使用正弦和余弦生成矩陣中的數(shù)字。

Matrix類中的數(shù)字也可以手動(dòng)輸入。為了了解Matrix類如何工作,我們將以一些手動(dòng)轉(zhuǎn)換作為開(kāi)始。

Matrix類中的每個(gè)數(shù)字都將應(yīng)用于圖像上每個(gè)點(diǎn)的3個(gè)坐標(biāo)(x、y或z)之一。

例如,下面是一個(gè)包含9個(gè)浮點(diǎn)數(shù)的矩陣:

1 0 0

0 1 0

0 0 1

頂行(1 , 0 , 0)指定源圖像的x坐標(biāo)將根據(jù)以下公式轉(zhuǎn)換:x = 1x + 0y + 0z。正如您所看到的,值在矩陣中的放置位置決定對(duì)應(yīng)數(shù)字將會(huì)如何影響結(jié)果。頂行總是會(huì)影響到x坐標(biāo),但可以操作源圖像的x、y和z坐標(biāo)。

第二行(0 , 1 , 0)意味著y坐標(biāo)將被確定為y = 0x + 1y + 0z,第三行(0 , 0 , 1)意味著z坐標(biāo)將確定為z = 0x + 0y + 1z。

換句話說(shuō),這個(gè)矩陣不會(huì)做任何轉(zhuǎn)換;所有內(nèi)容都會(huì)按照它在源圖像中的情況放置。

為了在代碼中實(shí)現(xiàn)這一點(diǎn),我們將創(chuàng)建Matrix對(duì)象,然后通過(guò)其setValues方法顯式地設(shè)置值。

Matrix matrix = new Matrix();

matrix.setValues(new float[] {

     1, 0, 0,

     0, 1, 0,

     0, 0, 1 

});


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)