我需要一个基本的想法,我如何能够扭曲图像触摸到一个特定的领域。图像过滤器应用于整个图像的翘曲,但我想扭曲单个点,就像我想扭曲一个人的眼睛,然后我会触及这一点。所以我需要一个关于这项工作的基本想法。
我试过这个,但它也适用于整个图像的过滤器。https://github.com/Jtfinlay/PhotoWarp
App:https://play.google.com/store/apps/details?id=hu.tonuzaba.android&hl=en
发布于 2017-07-19 08:46:37
翘曲不只是在一个“单点”,而是在某个区域,你在一个平稳的变形。
为了达到这个目的,你需要一个坐标的几何变换,它在接触点的某个邻域中工作。这样做的一种方法是在图像上应用方格网格,并用您的一些定律将网格节点围绕着触点移动(例如,对所有节点应用一个位移向量,其衰减因子使远离节点的节点不会移动)。
然后,您需要一个重采样函数来计算每个像素的新坐标并复制源像素的颜色。
为了取得好的效果,您必须实际反向工作:扫描目标图像,并为每个像素检索源坐标和源像素。应用双线性或双三次重采样以避免混叠。
为了便于实现,还应该采用网格化的思想:与其对目标网格进行变形,不如保持其不变,并将逆变形应用于源网格。
最后一件事:在网格方法中,将网格节点的位移看作两个标量函数DX(i,j)和DY(i,j),您可以分别处理。根据节点位移的知识,您可以通过插值来估计任意像素的位移(在这里,双三次曲线是合适的)。
发布于 2017-07-26 05:46:50
您可以使用画布检测该部分,并在on侦听器中停止该部分的操作。
代码示例
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);在perform侦听器中,如果检测到该点,则不能执行任何操作。
注意:您可以将drawBitmap替换为drawRect或其他颜色不可见的东西。
https://stackoverflow.com/questions/45182373
复制相似问题