我需要一個基本的想法,我怎樣才能扭曲特定區域的觸摸圖像。圖像過濾器在整個圖像上應用扭曲,但我想扭曲單點,就像如果我想扭曲人的眼睛那麼我會觸及那一點。所以我需要一個關於這項工作的基本想法。扭曲點區域上的圖像區域?
我試過這個,但它也適用於整個圖像的過濾器。 https://github.com/Jtfinlay/PhotoWarp
應用: https://play.google.com/store/apps/details?id=hu.tonuzaba.android&hl=en
我需要一個基本的想法,我怎樣才能扭曲特定區域的觸摸圖像。圖像過濾器在整個圖像上應用扭曲,但我想扭曲單點,就像如果我想扭曲人的眼睛那麼我會觸及那一點。所以我需要一個關於這項工作的基本想法。扭曲點區域上的圖像區域?
我試過這個,但它也適用於整個圖像的過濾器。 https://github.com/Jtfinlay/PhotoWarp
應用: https://play.google.com/store/apps/details?id=hu.tonuzaba.android&hl=en
一經不只是在「單點」,但在你的一路暢通變形部分地區。
爲了實現這一點,您需要對觸摸點的某個鄰域內的座標進行幾何變換。一種方法是在圖像上應用一個正方形網格,並按照您的某些定律在接觸點周圍移動網格節點(例如,將位移矢量應用於所有節點,其衰減因子使得遠處的節點不會不動)。
然後,您需要重新採樣函數來計算每個像素的新座標並複製源像素的顏色。
爲了獲得好的結果,您必須反向工作:掃描目標圖像併爲每個像素檢索源座標和源像素。應用雙線性或雙三次重採樣以避免混疊。
爲了便於實施,網格化思想也應該進行調整:而不是變形目標網格,保持其不變並將反向變形應用到源網格。最後一件事:在網格方法中,將網格節點的位移看作兩個標量函數DX(i,j)和DY(i,j),您可以分別處理它們。根據節點位移的知識,可以通過插值來估計任何像素的位移(雙三次在這裏是合適的)。
可以使用帆布,以檢測部和在ontouchlistener在該部分停止動作
代碼示例
Bitmap pricetagBmp = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.ic_tag_circle_24dp);
// canvas.drawBitmap(pricetagBmp,left + (right - left)/2, top + (bottom - top)/2 - (bounds.height()/2),circlePaint);
float imageStartX = (left + ((right-left)/2)) - (pricetagBmp.getWidth()/2);
float imageStartY = (top + ((bottom - top)/2)) - (pricetagBmp.getHeight()/2);
canvas.drawBitmap(pricetagBmp, imageStartX, imageStartY,circlePaint);
和ontouchlistener如果指向檢測可以執行任何動作
注意:您可以用drawRect或其他不可見的顏色代替drawBitmap
這是可以繪製在畫布上,但我想對觸摸區域執行一些扭曲效果,將修改基本圖像,而不是繪製,但感謝您的回答 –
@joy硬 - 我已經添加了筆記。您可以根據您的要求進行更改 –
參考t他:https://stackoverflow.com/questions/9237924/how-to-warp-images-in-android –
提到這個: [如何扭曲圖像](https://stackoverflow.com/questions/9237924/how -with-warp-images-in-android) –
這樣做並不適用於我的例外情況,保存warp狀態很方便。 –