Android API有一個Matrix(矩陣)類,當在現(xiàn)有位圖對象上進行繪制或從另一個位圖對象創(chuàng)建某個位圖對象時,可以使用該類。這個類使得我們能夠在一幅圖像上應(yīng)用空間轉(zhuǎn)換。這種類型的轉(zhuǎn)換可以是旋轉(zhuǎn)、裁剪、縮放或者更改圖像的坐標空間。
Matrix類以9個數(shù)字的數(shù)組表示轉(zhuǎn)換。在許多情況下,這些數(shù)字可以由一個公式生成,該公式在數(shù)學上表示應(yīng)該發(fā)生的轉(zhuǎn)換。例如,對于旋轉(zhuǎn)公式,通過使用正弦和余弦生成矩陣中的數(shù)字。
Matrix類中的數(shù)字也可以手動輸入。為了了解Matrix類如何工作,我們將以一些手動轉(zhuǎn)換作為開始。
Matrix類中的每個數(shù)字都將應(yīng)用于圖像上每個點的3個坐標(x、y或z)之一。
例如,下面是一個包含9個浮點數(shù)的矩陣:
1 0 0
0 1 0
0 0 1
頂行(1 , 0 , 0)指定源圖像的x坐標將根據(jù)以下公式轉(zhuǎn)換:x = 1x + 0y + 0z。正如您所看到的,值在矩陣中的放置位置決定對應(yīng)數(shù)字將會如何影響結(jié)果。頂行總是會影響到x坐標,但可以操作源圖像的x、y和z坐標。
第二行(0 , 1 , 0)意味著y坐標將被確定為y = 0x + 1y + 0z,第三行(0 , 0 , 1)意味著z坐標將確定為z = 0x + 0y + 1z。
換句話說,這個矩陣不會做任何轉(zhuǎn)換;所有內(nèi)容都會按照它在源圖像中的情況放置。
為了在代碼中實現(xiàn)這一點,我們將創(chuàng)建Matrix對象,然后通過其setValues方法顯式地設(shè)置值。
Matrix matrix = new Matrix();
matrix.setValues(new float[] {
1, 0, 0,
0, 1, 0,
0, 0, 1
});