Create simple effects for your images (III) - Negative & Grayscale Effects
前兩次提過,簡單地利用 Matrix ,就可以輕易做出 陰影特效 及 鏡像特效。
這次,我將向大家分享,如何利用另一種 Matrix - ColorMatrix,來做出負片與灰階效果。
最上面那張圖的上半部,是原來的影像,一個美麗的地球。下半部的左邊,就是這地球影像的負片效果。右邊,則是灰階效果的呈現。
負片效果
負片效果的演算法,很簡單。就像底下這樣。
算法很簡單,可是在 Android 中要如何做到呢?難不成要用 Bitmap.getPixel() 及 Bitmap.setPixel(),逐一針對每個像素來改他的顏色值?!
當然不是!這樣的做法,太沒效率,速度一定很慢。在 Android 中,針對這樣的需求,你可以透過 ColorMatrixColorFilter 來完成。在建構一個 ColorMatrixColorFilter 時,你得傳給他一個 ColorMatrix。因此,重點就在這個 ColorMatrix。
ColorMatrix 文件一開頭的註釋,就已經將他的功能講得很清楚。
讓我們看一下,這負片效果的原始碼,你會更加清楚。
將一個地球的圖片設給 m_bmp,透過上面這個程式範例,畫出來的樣子,就是一張具有負片效果的圖。
灰階效果
負片會了,灰階應該也很簡單了吧!我告訴你,要完成灰階效果,更簡單。ColorMatrix 都幫你將算法寫好了。你只要呼叫 ColorMatrix.setSaturation(0) 即可。
等等,學東西,可不能這樣就含混帶過。別忘了,Android 的原始碼都給你了,我們得利用他追根究柢,一探究竟才行。
打開 ColorMatrix.java 的原始碼,翻到 setSaturation()。這個函式的實現如下:
透過 android.graphics.ColorFilter 與 android.graphics.ColorMatrix,你還可以玩出更多的效果,別忘了 ApiDemos 的範例程式中,也有用到。
很多好東西,就在你身旁,千萬別捨近求遠了。
沒有留言:
張貼留言