Android画图之Matrix(一)
Matrix?,中文里叫矩陣,高等數(shù)學(xué)里有介紹,在圖像處理方面,主要是用于平面的縮放、平移、旋轉(zhuǎn)等操作。
????????首先介紹一下矩陣運(yùn)算。加法和減法就不用說了,太簡(jiǎn)單了,對(duì)應(yīng)位相加就好。圖像處理,主要用到的是乘法?。下面是一個(gè)乘法的公式:
?
?
??????? 在?Android?里面,?Matrix?由?9?個(gè)?float?值構(gòu)成,是一個(gè)?3*3?的矩陣。如下圖。
????????
沒專業(yè)工具,畫的挺難看。解釋一下,上面的?sinX?和?cosX?,表示旋轉(zhuǎn)角度的?cos?值和?sin?值,注意,旋轉(zhuǎn)角度是按順時(shí)針方向計(jì)算的。?translateX?和?translateY?表示?x?和?y?的平移量。?scale?是縮放的比例,?1?是不變,?2?是表示縮放?1/2?,這樣子。
????????下面在?Android?上試試?Matrix?的效果。
Java代碼?
1.????? public?class?MyView?extends?View?{??
2.????? ??
3.????? ????private?Bitmap?mBitmap;??
4.????? ??
5.????? ????private?Matrix?mMatrix?=?new?Matrix();??
6.????? ??
7.????? ????public?MyView(Context?context)?{??
8.????? ??
9.????? ????????super(context);??
10.? ??
11.? ????????initialize();??
12.? ??
13.? ????}??
14.? ??
15.? ????private?void?initialize()?{???????
16.? ??
17.? ????????mBitmap?=?((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();??????????
18.? ??
19.? ????????float?cosValue?=?(float)?Math.cos(-Math.PI/6);??
20.? ??
21.? ????????float?sinValue?=?(float)?Math.sin(-Math.PI/6);??
22.? ??
23.? ????????mMatrix.setValues(??
24.? ??
25.? ????????????????new?float[]{??
26.? ??
27.? ????????????????????????cosValue,?-sinValue,?100,??
28.? ??
29.? ????????????????????????sinValue,?cosValue,?100,??
30.? ??
31.? ????????????????????????0,?0,?2});??
32.? ??
33.? ????}??
34.? ??
35.? ????@Override?protected?void?onDraw(Canvas?canvas)?{??
36.? ??
37.? //??????super.onDraw(canvas);??//當(dāng)然,如果界面上還有其他元素需要繪制,只需要將這句話寫上就行了。??
38.? ??
39.? ????????canvas.drawBitmap(mBitmap,?mMatrix,?null);??
40.? ??
41.? ????}??
42.? ??
43.? }??
?運(yùn)行結(jié)果如下:
? ? ???以左上角為頂點(diǎn),縮放一半,逆時(shí)針旋轉(zhuǎn)30度,然后沿x軸和y軸分別平移50個(gè)像素,代碼 里面寫的是100,為什么是平移50呢,因?yàn)榭s放了一半。
? ? ??大家可以自己設(shè)置一下Matrix的值,或者嘗試一下兩個(gè)Matrix相乘,得到的值設(shè)置進(jìn)去,這樣才能對(duì)Matrix更加熟練。
這里講的直接賦值的方式也許有點(diǎn)不好理解,不過還好,?andrid?提供了對(duì)矩陣的更方便的方法,下一篇介紹?。
轉(zhuǎn)載于:https://www.cnblogs.com/deve/archive/2012/02/27/2569026.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Android画图之Matrix(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d-x游戏实例(5)-A星算
- 下一篇: poj1088 滑雪