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
});