標籤:
源碼下載:http://download.csdn.net/detail/jsgaobiao/9510213
? 【實驗目的】
使用A n d r o id系統進行映像變換,映像變換包括形狀變換和顏色變換
– 映像變換:平移變換、尺度變換、旋轉變換等。
– 顏色變換:冰凍效果、融炎效果、漫畫效果、羽化效果、縮放模糊效果、LOMO特效、電影效果等
? 【實驗器材】
Android Studio 1.5.1
Xiaomi Pad (7.9’’): Android 4.4.4 , 1536*2048 xhdpi
? 【實驗原理】
本次實驗涉及的變換分兩種,第一類是映像變換,包括:
平移:
旋轉:
縮放:
錯切:
第二類變換是顏色變換,包括:
漫畫: R= |g – b + g + r| * r / 256
G = |b – g + b + r| * r / 256
B = |b – g + b + r| * g / 256
冰凍: R= R – G – B
G = G – B – R
B = B – R – G
熔炎:R = R * 128 / (G + B + 1)
G = G * 128 / (B +R +1)
B = B * 128 / (R + G +1)
邊緣: 相鄰兩個像素的差分
如所示,程式提供了兩個Spinner分別供使用者選擇相應的顏色變換和形狀變換的選項,並在螢幕的主要區域顯示映像。
在程式的實現上,我是將原圖讀入儲存為Bitmap,先對其做顏色變換,再做形狀變換:
具體的形狀變換和顏色變換,按照上文中給出的方法實現。
其中,旋轉、縮放、錯切三種效果可以利用Matrix類型內建的變換函數實現:
平移效果則是根據公式: ,逐像素進行位移。
顏色變換以冰凍效果為例:
冰凍效果就是按照公式:R = R – G – B;G = G – B – R;B = B – R – G
對映像的RGB進行重新計算。
由於每個像素的RGB值都被以二進位的格式儲存在一個int類型中,因此我先將(I,j)像素的顏色資訊儲存在pix裡,通過位元運算提取他們的Alpha,R,G,B,4個通道的值,並進行重新計算後,更新映像的RGB值。
其他顏色變換的效果只要根據不同的公式進行計算即可。
在實際測試中我發現,對於本身缺少藍色成分的圖片,使用該冰凍變換的公式效果並不好,會使得得到的圖片非常暗,所以該效果的變換公式還是有一定的缺陷的。
? 【小結】
我通過本次實驗,瞭解了映像變換的相關演算法和Android處理映像的資料結構的使用方法,熟悉了安卓系統中下拉選擇菜單的使用。增加了自己在影像處理方面的編程經驗。
【Android】映像變換