如何在安卓系统中实现拖曳扭曲图像滤镜?

17
我正在开发一个自定义图像滤镜项目。我遇到了一个具有挑战性的任务,即应用扭曲滤镜,就像有趣的脸部特效应用中所示。我想要开发前三个与有趣的脸部特效相同的滤镜。
为了实现这样的效果,我开始使用GPUImageView GPUImage,它使用seekbar来从中心扭曲图像。我已经实现了凸起的扭曲效果。但是是否有任何方法可以实现拖动滤镜,让我能够通过拖动手势扭曲我的图像?
我们试图搜索除GPUImage之外的任何其他第三方类。但我们找不到有用的东西。
我们的问题如下:
1)是否可能使用拖动手势应用拖动滤镜?(任何代码片段或参考都可接受)
2)是否有其他第三方类可以帮助我们获得上述结果。
提前感谢!

enter image description here


请附上一些代码片段,并解释你已经尝试过什么或者你遇到了哪些库。 - DroidDev
@DroidDev,我已经尝试过https://github.com/CyberAgent/android-gpuimage,它具有效果滤镜。当应用单个滤镜时,它可以正常工作,但是当我尝试应用多个滤镜时,它完全出错了。图像从随机点开始变形。 - Maddy
https://github.com/ragnraok/android-image-filter。你可以尝试运动模糊功能。 - Rndomcoder
@Rndomcoder 谢谢,但这不是我要找的。 - Maddy
你有找到这个问题的解决方案吗? - Rucha Bhatt Joshi
显示剩余3条评论
1个回答

6
一种实现方式是使用额外的纹理,指定变形应用给片元着色器。您可以在应用程序中修改该纹理内容,当用户触摸图片以应用变形时。 GPUImageBulgeDistortionFilter 扩展了 GPUImageFilter,它只设计使用一个纹理。
您需要在 GPUImageFilter 中复制纹理绑定 (glBindTexture) 和分配到片元着色器 (glUniform1i),并使用 1 替换新纹理 (而不是 0)。您还需要复制 glGetUniformLocation,并使用其他名称 (例如 inputImageTexture2)。
修改 GPUImageBulgeDistortionFilter 的片元着色器或创建一个从 GPUImageBulgeDistortionFilter 派生的新类来添加 "uniform sampler2D inputImageTexture2;\n" +。
最后,在同一片段着色器中添加代码,使用inputImageTexture2纹素来扭曲inputImageTexture中的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接