實現iOS系統相機九宮格濾鏡的思路

前言

大家會發現使用iPhone拍照時候有一個使用頻率不是特別高的一個功能——系統自帶濾鏡,平時拍照拍了就到美圖軟件美美,最近實習單位(多媒體技術公司)有個需求就是做一個這樣的效果,爲了全平臺通吃採用OpenGL ES開發。

看標題可能還不知道我所描述的九宮格是什麼,下面大家可以看一下這張截圖:

iOS相機app自帶九宮格濾鏡

對於性能的要求,達到iPhone切換濾鏡的縮放效果,過度動畫流暢。

思路

OpenGL ES進行開發,那麼每個濾鏡是一個矩形,先通過三角圖元繪製矩形,通過texture紋理貼圖,採集攝像頭數據,將每一幀以貼圖形式貼到創建的矩形上,但是要如何實現9個濾鏡呢?因爲後期會加入公司自己的濾鏡效果,參考了一些代碼,使用viewport(視口),每次刷畫面的時候創建九個視口,每個視口的矩形以OpenGL座標定位(-1,1),(1,1),(-1,-1),(1,-1)。這樣每次攝像頭數據進來,glview刷新就會實時顯示九宮格視頻。

切換動畫

對於動畫,其事就是將變化過程每一幀刷到屏幕,公司工程封裝了一個Timg調用這個函數可以實現回調刷新屏幕(應該是與cadisplaylink有關),我設置了一個scale值,每次刷屏幕的時候這個Scale會變化,從0-1或者從1-0,如果是緩進緩出,也就是開始做加速運動中間勻速運動結束減速運動,通過Scale值體現。

切換動畫根據視口位置不同而做不同的幾個座標變化,舉個例子:中間的視口在向四方拉伸,周圍八塊在拉伸過程中也要對原點進行變化,變化量爲變化所需的總變化量*Scale。

觸摸響應

對設備屏幕進行監聽,根據整個glview的大小進行判斷觸摸點在哪個視口,獲取觸點xy座標,判斷落在的區域,觸發相對應視口的變化函數。

效果

九宮格效果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章