Android Matrix變換矩陣的探索(2)

2021-07-11 19:50:06 字數 2711 閱讀 8762

前面我已經大概的介紹了一下matrix矩陣,下面我們來看一下

***scale(),***skew(),***translate(),***rotate()

的計算過程:

對於乙個座標為(x

0,y0

) 的點,我希望把他變成(k

x0,k

y0) ,那麼我們可以給它乘上乙個矩陣: ⎡⎣

⎢⎢k0

00k0

001⎤

⎦⎥⎥∗

⎡⎣⎢⎢

⎢x0y

01⎤⎦

⎥⎥⎥=

⎡⎣⎢⎢

⎢kx0

ky01

⎤⎦⎥⎥

⎥ 這樣,我們就把這個點成功的進行了變換。

那麼矩陣是如何對進行變換的呢?

其實很簡單,它只不過是對的每個畫素點進行了變換,組成的所有畫素點都變了,那麼自然也就變了。

這樣說的話,那縮放變換感覺很詭異啊,乙個畫素點還能變大變小嗎?

的縮放原理相對複雜一些,但其實它就是按照一定的演算法,對進行下取樣(縮小)、上取樣(放大)來對進行變換的。

所謂下取樣,就是按照一定的規律,在原圖的所有畫素點中,擷取符合規律的畫素點(這意味著一些畫素點會被丟棄掉),然後將這些畫素點呈現出來,我們就可以看到一張縮小了得。

所謂上取樣,就是按照一定的演算法,在原的額畫素群中插入一些畫素點,然後再把這些畫素點呈現出來,就得到一張放大的。

當然這個複雜的計算過程不需要我們自己去實現,我們只需要告訴系統,我要一張多大的,系統就會幫助我們完成這個過程,然後直接給我們一張處理好的。

前面我們已經知道了scale變換是由msacle_x,和mscale_y控制的,那麼自然的,***scale()就是通過修改這兩個值到達變換矩陣目的。

注:下面的講解都基於乙個標準矩陣 a 來進行。呼叫s

etsc

ale(

k1,k

2),則是直接把a矩陣設定為: ⎡⎣

⎢⎢k1

000k

2000

1⎤⎦⎥

⎥ 再次說明,呼叫set***()是直接設定矩陣的值,不管你此前對矩陣做了什麼操作,它都會被這個矩陣給覆蓋掉。呼叫p

resc

ale(

k1,k

2),則是經過如下計算: ⎡⎣

⎢⎢k1

000k

2000

1⎤⎦⎥

⎥∗⎡⎣

⎢⎢10

0010

001⎤

⎦⎥⎥=

⎡⎣⎢⎢

k100

0k20

001⎤

⎦⎥⎥

post

scal

e(k1

,k2)

是後乘,它的計算過程如下: ⎡⎣

⎢⎢10

0010

001⎤

⎦⎥⎥∗

⎡⎣⎢⎢

k100

0k20

001⎤

⎦⎥⎥=

⎡⎣⎢⎢

k100

0k20

001⎤

⎦⎥⎥

呼叫set

skew

(k1,

k2) ,直接將a設定成:⎡⎣

⎢⎢1k

20k1

1000

1⎤⎦⎥

⎥ 呼叫p

resk

ew(k

1,k2

) 的計算過程如下: ⎡⎣

⎢⎢1k

20k1

1000

1⎤⎦⎥

⎥∗⎡⎣

⎢⎢10

0010

001⎤

⎦⎥⎥=

⎡⎣⎢⎢

1k20

k110

001⎤

⎦⎥⎥

呼叫pos

tske

w(k1

,k2)

的計算過程如下: ⎡⎣

⎢⎢10

0010

001⎤

⎦⎥⎥∗

⎡⎣⎢⎢

1k20

k110

001⎤

⎦⎥⎥=

⎡⎣⎢⎢

1k20

k110

001⎤

⎦⎥⎥

呼叫set

tran

slat

e() 是將矩陣直接設定為: ⎡⎣

⎢⎢10

0010

k1k2

1⎤⎦⎥

pretranslate()和posttranslate()的計算原理和上述的一樣的。

呼叫setrotate(a)會直接把矩陣設定為: ⎡⎣

⎢⎢co

s(a)

sin(

a)0−

sin(

a)co

s(a)

0001

⎤⎦⎥⎥

prerotate()和postrotate()的計算過程就不在贅述了。

Android Matrix變換矩陣的探索 1

標準矩陣又稱為對角矩陣,它的形式如下 1,0,0 0,1,0 0,0,1 矩陣的簡單運算規則 左矩陣的一行的每個值,分別按順序一一對應的乘上右矩陣的一列的值。也就是說,運算的左右兩個矩陣必須符合左矩陣的列數要等於右矩陣的行數,否則兩個矩陣就不能進行運算。下面給出兩個例子 例1 例2可以看出,由於矩陣...

Android Matrix類的使用

在android中,對的處理需要使用到matrix類,matrix是乙個3 x 3的矩陣,他對的處理分為四個基本型別 1 translate 平移變換 2 scale 縮放變換 3 rotate 旋轉變換 4 skew 錯切變換 在android的api裡對於每一種變換都提供了三種操作方式 set ...

android Matrix工具的使用

matrix工具類是對圖形進行特效處理。matrix 是乙個矩陣工具類,本身不能對圖形進行變換,可以與其他api來結合使用。獲取matrix物件,可以直接建立,可以從其他封裝了matrix類中獲取,transformation裡面就封裝了matrix物件。呼叫matrix物件的方法可以對圖形影象進行...