棰滆壊鐭╅樀
android涓彲浠ラ氳繃棰滆壊鐭╅樀錛圕olorMatrix綾伙級鏂歸潰鐨勬搷浣滈鑹詫紝棰滆壊鐭╅樀鏄竴涓?x4 鐨勭煩闃碉紙濡傚浘1.1錛?/p>
鍙互鐢ㄦ潵鏂歸潰鐨勪慨鏀瑰浘鐗囦腑RGBA鍚勫垎閲忕殑鍊鹼紝棰滆壊鐭╅樀浠ヤ竴緇存暟緇勭殑鏂瑰紡瀛樺偍濡備笅錛?br /> [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ]
浠栭氳繃RGBA鍥涗釜閫氶亾鏉ョ洿鎺ユ搷浣滃搴旈鑹詫紝濡傛灉浼?xì)鋴社敤Photoshop灝變細(xì)鐭ラ亾鏈夋椂澶勭悊鍥劇墖閫氳繃鎺у埗RGBA鍚勯鑹查氶亾鏉ュ仛鍑虹壒孌婄殑鏁堟灉銆?/p>
榪欎釜鐭╅樀瀵歸鑹茬殑浣滅敤璁$畻鏂瑰紡濡?.3紺猴細(xì)
鐭╅樀鐨勮繍綆楄鍒欐槸鐭╅樀A(chǔ)鐨勪竴琛屼箻浠ョ煩闃礐鐨勪竴鍒椾綔涓虹煩闃礡鐨勪竴琛岋紝
C鐭╅樀鏄浘鐗囦腑鍖呭惈鐨凙RGB淇℃伅錛孯鐭╅樀鏄敤棰滆壊鐭╅樀搴旂敤浜嶤涔嬪悗鐨勬柊鐨勯鑹插垎閲忥紝榪愮畻緇撴灉濡備笅錛?br />
R' = a*R + b*G + c*B + d*A + e;
G' = f*R + g*G + h*B + i*A + j;
B' = k*R + l*G + m*B + n*A + o;
A' = p*R + q*G + r*B + s*A + t;
棰滆壊鐭╅樀騫朵笉鏄湅涓婂幓閭d箞娣卞ゥ錛屽叾瀹為渶瑕佷嬌鐢ㄧ殑鍙傛暟寰堝皯錛岃屼笖寰堟湁瑙勫緥絎竴琛屽喅瀹氱孩鑹茬浜岃鍐沖畾緇胯壊
絎笁琛屽喅瀹氳摑鑹詫紝絎洓琛屽喅瀹氫簡閫忔槑搴︼紝絎簲鍒楁槸棰滆壊鐨勫亸縐婚噺銆備笅闈㈡槸涓涓疄闄呬腑浣跨敤鐨勯鑹茬煩闃點(diǎn)?br />
濡傛灉鎶婅繖涓煩闃典綔鐢ㄤ簬鍚勯鑹插垎閲忕殑璇濓紝R=A*C錛岃綆楀悗浼?xì)鍙戠帋图屽悇涓鑹插垎閲忓疄闄呬笂娌℃湁鋼Q浣曠殑鏀瑰彉(R'=R G'=G B'=B A'=A)銆?br />
鍥?.5鎵紺虹煩闃佃綆楀悗浼?xì)鍙戠幇绾㈣壊鍒嗛噺澧炲?00錛岀豢鑹插垎閲忓鍔?00錛?/p>
榪欐牱鐨勬晥鏋滃氨鏄浘鐗囧亸榛勶紝鍥犱負(fù)綰㈣壊鍜岀豢鑹叉販鍚堝悗寰楀埌榛勮壊錛岄粍鑹插鍔犱簡100錛屽浘鐗囧綋鐒跺氨鍋忛粍浜嗐?br />
鏀瑰彉鍚勯鑹插垎閲忎笉浠呭彲浠ラ氳繃淇敼絎?鍒楃殑棰滆壊鍋忕Щ閲忎篃鍙涓婇潰鐭╅樀鎵紺哄皢瀵瑰簲鐨勯鑹插間箻浠ヤ竴涓嶆暟錛岀洿鎺ユ斁澶с?/p>
涓婂浘1.6鏄皢緇胯壊鍒嗛噺涔樹互2鍙樹負(fù)鍘熸潵鐨?鍊嶃傜浉淇¤鑰呰嚦姝ゅ凡緇忔槑鐧戒簡濡備綍閫氳繃棰滆壊鐭╅樀鏉ユ敼鍙樺悇棰滆壊鍒嗛噺銆?/p>
涓嬮潰緙栧啓涓孌典唬鐮佹潵錛岄氳繃璋冩暣棰滆壊鐭╅樀鏉ヨ幏寰椾笉鍚岀殑棰滆壊鏁堟灉錛孞avaCode濡備笅錛?br />澶嶅埗鍒板壀璐存澘 Java浠g爜
CMatrix綾諱富瑕佽礋璐?鎺ユ敹棰滆壊鐭╅樀鐨勮緗拰閲嶇粯錛屾病鏈夎璇寸殑銆侻yImage綾諱腑榪涜緇樺浘宸ヤ綔錛岄鍏堣緗鑹茬煩闃礳m.set(..)浠庝竴緇存暟緇勪腑璇誨彇鏁版嵁20涓暟鎹粰棰滆壊鐭?闃佃祴鍊鹼紝paint.setColorFilter(..)璁劇疆棰滆壊婊ら暅錛岀劧鍚庣粯鍥撅紝鏁堟灉灝卞嚭鏉ヤ簡錛堣繖涓繃紼嬪拰PS宸笉澶氾級濡備笅錛?/span>
鐪嬪埌榪欓噷錛岀浉淇″ぇ瀹跺棰滆壊鐭╅樀鐨勪綔鐢ㄥ凡緇忔湁浜嗕竴涓洿瑙傜殑鎰熷彈錛岀幇鍦ㄤ篃鍙互灝濊瘯鍋氫竴涓収鐗囩壒鏁堢殑杞歡銆?/span>
浣嗘槸鍚勭鏁堟灉騫朵笉鑳借鐢ㄦ埛鎵嬪姩璋冭妭棰滆壊鐭╅樀錛岃繖閲岄渶瑕佽綆楀叕寮忥紝鐢變簬鏈漢騫朵笉鏄仛鍥懼艦杞歡鐨勪篃涓嶈兘鎻愪緵錛屽彲浠ュ弬鑰冭繖涓摼鎺ワ細(xì)
http://www.adobe.com/devnet/flash/articles/matrix_transformations/ColorMatrixDemo.swf
鍧愭爣鍙樻崲鐭╅樀
鍧愭爣鍙樻崲鐭╅樀鏄竴涓?*3鐨勭煩闃靛鍥?.1錛岀敤鏉ュ鍥懼艦榪涜鍧愭爣鍙樺寲錛屽皢鍘熸潵鐨勫潗鏍囩偣杞Щ鍒版柊鐨勫潗鏍囩偣錛?/span>
鍥犱負(fù)涓涓浘鐗囨槸鏈夌偣闃靛拰姣忎竴鐐逛笂鐨勯鑹蹭俊鎭粍鎴愮殑錛屾墍浠ュ鍧愭爣鐨勫彉鎹紝灝辨槸瀵規(guī)瘡涓鐐硅繘琛屾惉縐誨艦鎴愭柊鐨勫浘鐗囥?/span>
鍏蜂綋鐨勮鍥懼艦鐨勬斁澶х緝?yōu)畯锛尶U誨姩錛屾棆杞紝閫忚錛屾壄鏇茶繖浜涙晥鏋滈兘鍙互鐢ㄦ鐭╅樀鏉ュ畬鎴愩?/span>
榪欎釜鐭╅樀鐨勪綔鐢ㄦ槸瀵瑰潗鏍噚,y榪涜鍙樻崲璁$畻緇撴灉濡備笅錛?/span>
x'=a*x+b*y+c
y'=d*x+e*y+f
閫氬父鎯呭喌涓媑=h=0,榪欐牱浣?=0*x+0*y+1鎭掓垚绔嬨傚拰棰滆壊鐭╅樀涓鏍鳳紝鍧愭爣鍙樻崲鐭╅樀鐪熸浣跨敤鐨勫弬鏁板緢灝戜篃寰堟湁瑙勫緥銆?/span>
涓婂浘灝辨槸涓涓潗鏍囧彉鎹㈢煩闃電殑綆鍗曚緥瀛愶紝璁$畻鍚庡彂鐜皒'=x+50,y'=y+50.
鍙鍥劇墖鐨勬瘡涓鐐歸兘鍦▁鍜寉鏂瑰悜涓婂鉤縐誨埌浜嗭紙50錛?0錛夌偣澶勶紝榪欑鏁堟灉灝辨槸騫崇Щ鏁堟灉錛屽皢鍥劇墖杞Щ鍒頒簡錛?0錛?0錛夊銆?/span>
璁$畻涓婇潰寰楃煩闃祒'=2*x,y‘=2*y.緇忚繃棰滆壊鐭╅樀鍜屼笂闈㈣漿縐繪晥鏋滃涔?fàn)锛岀涙俊璇昏呭彲浠ユ槑鐧借繖涓煩闃電殑浣滅敤浜嗭紝榪欎釜鐭╅樀瀵瑰浘鐗囪繘琛屼簡鏀懼ぇ錛屽叿浣撶殑璇存槸鏀懼ぇ浜嗕簩鍊嶃?/span>
涓嬮潰灝嗕粙緇嶅嚑縐嶅父鐢ㄧ殑鍙樻崲鐭╅樀錛?/span>
1. 鏃嬭漿
緇曞師鐐歸嗘椂閽堟棆杞?#952;搴﹁鐨勫彉鎹㈠叕寮忔槸 x' = xcosθ − ysinθ 涓?y銆? = xsinθ + ycosθ
2. 緙╂斁
鍙樻崲鍚庨暱瀹藉垎鍒斁澶'=scale*x;y'=scale*y.
3. 鍒囧彉
4. 鍙嶅皠
( , )鍗曚綅鍚戦噺
5. 姝f姇褰?br />
( , )鍗曚綅鍚戦噺
涓婇潰鐨勫悇縐嶆晥鏋滀篃鍙互鍙犲姞鍦ㄤ竴璧鳳紝鏃㈢煩闃電殑緇勫悎鍙樻崲錛屽彲浠ョ敤鐭╅樀涔樻硶瀹炵幇涔嬶紝濡傦細(xì)R=B(A*C)=(B*A)C,娉ㄦ剰涓鐐瑰氨鏄疊*A鍜孉*B涓鑸槸涓嶇瓑鐨勩?/p>
涓嬮潰灝嗙紪涓涓皬紼嬪簭錛岄氳繃鎺у埗鍧愭爣鍙樻崲鐭╅樀鏉ヨ揪鍒版帶鍒跺浘褰㈢殑鐩殑錛孞avaCode濡備笅錛?br />
澶嶅埗鍒板壀璐存澘 Java浠g爜
涓婇潰鐨勪唬鐮佷腑綾籆ooMatrix鐢ㄤ簬鎺ユ敹鐢ㄦ埛杈撳叆鐨勫潗鏍囧彉鎹㈢煩闃靛弬鏁幫紝綾籑yImage鎺ユ敹鍙傛暟錛岄氳繃setValues()璁劇疆鐭╅樀鍙傛暟錛岀劧鍚嶤anvas璋冪敤drawBitmap緇樺浘銆傛晥鏋滃涓嬶細(xì)
涓婇潰緇欏嚭浜嗙敤鍧愭爣鍙樻崲鐭╅樀鍋氬嚭鐨勫悇縐嶆晥鏋滐紝鐢ㄥ潗鏍囧彉鎹㈢煩闃靛彲浠ユ柟闈㈢殑璋冭妭鍥懼艦鐨勫悇縐嶆晥鏋滐紝
浣嗘槸鎴戜滑鐪嬬湅Matrix綾誨氨鍙互鍙戠幇錛屽疄闄呬笂錛宮atrix綾繪湰韜凡緇忔彁渚涗簡璁稿綾諱技鐨勬柟娉曪紝鎴戜滑鍙璋冪敤錛屽氨鍙互浜嗐?/span>
setScale(float sx, float sy, float px, float py) 鏀懼ぇ
setSkew(float kx, float ky, float px, float py) 鏂滃垏
setTranslate(float dx, float dy) 騫崇Щ
setRotate(float degrees, float px, float py) 鏃嬭漿
涓婇潰鐨勫嚱鏁版彁渚涗簡鍩烘湰鐨勫彉鎹㈠鉤縐伙紝鏀懼ぇ錛屾棆杞紝鏂滃垏銆備負(fù)浜嗗仛鍑烘洿澶嶆潅鐨勫彉鎹紝鍚屾椂涓嶅繀浜叉墜鍘繪敼鍔ㄥ潗鏍囧彉鎹㈢煩闃碉紝
Matrix綾繪彁渚涗簡璁稿Map鏂規(guī)硶錛屽皢鍘熷浘褰㈡槧灝勫埌鐩爣鐐規(guī)瀯鎴愭柊鐨勫浘褰紝
涓嬮潰綆榪皊etPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount) 鐨勭敤娉曪紝甯屾湜璧峰埌涓句竴鍙嶄笁鐨勪綔鐢ㄣ?/span>
鍙傛暟src鍜宒st鏄垎鍒瓨鍌ㄤ簡鍘熷浘鍍忕殑鐐瑰拰鍜屾寚瀹氱殑鐩爣鐐圭殑涓緇存暟緇勶紝鏁扮粍涓瓨鍌ㄧ殑鍧愭爣鏍煎紡濡備笅錛?/span>
[x0, y0, x1, y1, x2,y2,...]
榪欎釜涓嚱鏁板皢src涓殑鍧愭爣鏄犲皠鍒癲st涓殑鍧愭爣錛屽疄鐜板浘鍍忕殑鍙樻崲銆?/span>
鍏蜂綋鐨勪緥瀛愬彲浠ュ弬鑰傾PIDemos閲岀殑PolyToPoly錛屾垜鍦ㄨ繖閲屽氨涓嶅啀璐翠唬鐮佷簡錛屽彧璁蹭竴涓嬪嚱鏁版槸鎬庝箞鍙樻崲鍥劇墖鐨勩備笅闈㈡槸鏁堟灉錛?/span>
鍥句腑鍐?鐨勬槸鍘熷浘錛屽啓鏈?錛?錛?鐨勬槸鍙樻崲鍚庣殑鍥懼艦銆傜幇鍦ㄥ垎鏋?鏄庝箞鍙樻崲鏉ョ殑錛屽彉鎹㈢殑鍘熷潗鏍囩偣鍜岀洰鐨勫潗鏍囩偣濡備笅錛?/span>
src=new float[] { 32, 32, 64, 32 }
dst=new float[] { 32, 32, 64, 48 }
浠?涓婂浘鏍囩ず鍑虹殑鍧愭爣鐪嬪嚭鍘熷浘鐨勶紙32錛?2錛夋槧灝勫埌鍘熷浘鐨勶紙32錛?2錛夛紝錛?4錛?2錛夋槧灝勫埌鍘熷浘錛?4錛?8錛夎繖鏍風(fēng)殑鏁堟灉鏄浘鍍忔斁澶т簡鑰屼笖鍙戠敓浜嗘棆杞?榪欐牱鐨勮繃紼嬬浉褰撲簬錛?2錛?2錛夌偣涓嶅姩錛岀劧鍚庢媺浣忓浘褰紙64錛?2錛夌偣騫舵媺鍒幫紙64錛?8錛夌偣澶勶紝榪欐牱鍥懼艦蹇呯劧浼?xì)琚媺鋷祖攽证q朵笖鍙戠敓鏃嬭漿銆傛渶鍚庣敤涓涓鉤縐?灝嗗浘褰㈢Щ鍔ㄥ埌鍙寵竟鐜板湪鐨勪綅緗傚笇鏈涜兘澶熷ソ濂界悊瑙h繖涓榪囩▼錛屼笅闈㈢殑3錛?鍥炬槸鍚屾牱鐨勯亾鐞嗐?/span>