在編程中有時(shí)候需要對(duì)圖片做特殊的處理,比如將圖片做出黑白的,或者老照片的效果,有時(shí)候還要對(duì)圖片進(jìn)行變換,以拉伸,扭曲等等。
這些效果在android中有很好的支持,通過(guò)顏色矩陣(ColorMatrix)和坐標(biāo)變換矩陣(Matrix)可以完美的做出上面的所說(shuō)的效果。
下面將分別介紹這兩個(gè)矩陣的用法和相關(guān)的函數(shù)。
顏色矩陣
android中可以通過(guò)顏色矩陣(ColorMatrix類(lèi))方面的操作顏色,顏色矩陣是一個(gè)5x4 的矩陣(如圖1.1)
可以用來(lái)方面的修改圖片中RGBA各分量的值,顏色矩陣以一維數(shù)組的方式存儲(chǔ)如下:
[ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ]
他通過(guò)RGBA四個(gè)通道來(lái)直接操作對(duì)應(yīng)顏色,如果會(huì)使用Photoshop就會(huì)知道有時(shí)處理圖片通過(guò)控制RGBA各顏色通道來(lái)做出特殊的效果。
這個(gè)矩陣對(duì)顏色的作用計(jì)算方式如1.3示:

矩陣的運(yùn)算規(guī)則是矩陣A的一行乘以矩陣C的一列作為矩陣R的一行,
C矩陣是圖片中包含的ARGB信息,R矩陣是用顏色矩陣應(yīng)用于C之后的新的顏色分量,運(yùn)算結(jié)果如下:
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;
顏色矩陣并不是看上去那么深?yuàn)W,其實(shí)需要使用的參數(shù)很少,而且很有規(guī)律第一行決定紅色第二行決定綠色
第三行決定藍(lán)色,第四行決定了透明度,第五列是顏色的偏移量。下面是一個(gè)實(shí)際中使用的顏色矩陣。

如果把這個(gè)矩陣作用于各顏色分量的話,R=A*C,計(jì)算后會(huì)發(fā)現(xiàn),各個(gè)顏色分量實(shí)際上沒(méi)有任何的改變(R'=R G'=G B'=B A'=A)。

圖1.5所示矩陣計(jì)算后會(huì)發(fā)現(xiàn)紅色分量增加100,綠色分量增加100,
這樣的效果就是圖片偏黃,因?yàn)?span style="font-family: arial, helvetica, sans-serif">紅色和綠色混合后得到黃色,黃色增加了100,圖片當(dāng)然就偏黃了。

改變各顏色分量不僅可以通過(guò)修改第5列的顏色偏移量也可如上面矩陣所示將對(duì)應(yīng)的顏色值乘以一個(gè)倍數(shù),直接放大。
上圖1.6是將綠色分量乘以2變?yōu)樵瓉?lái)的2倍。相信讀者至此已經(jīng)明白了如何通過(guò)顏色矩陣來(lái)改變各顏色分量。
下面編寫(xiě)一段代碼來(lái),通過(guò)調(diào)整顏色矩陣來(lái)獲得不同的顏色效果
posted on 2011-10-25 11:05
小果子 閱讀(255)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
Android & Ios