如何在 android 中实现 Drag Distortion Image 过滤器?

Posted

技术标签:

【中文标题】如何在 android 中实现 Drag Distortion Image 过滤器?【英文标题】:How to implement Drag Distortion Image filter in android? 【发布时间】:2017-04-07 13:08:09 【问题描述】:

我正在开发自定义图像过滤器项目。我遇到了一项具有挑战性的任务,我应该在其中应用失真滤镜,如Funny face effect app 所示。我想开发前 3 个滤镜,可在滑稽脸效果中使用。

为了实现这样的效果,我开始使用 GPUImageView GPUImage 在此,它使用搜索栏从中心扭曲图像。我已经实现了 Bulge 失真。 但是有什么方法可以实现拖动过滤器,我可以通过拖动手势扭曲我的图像?

我们尝试搜索除 GPUImage 之外的任何其他第三方类。但是我们找不到有用的东西。

我们的查询如下:-

1) 是否可以使用拖动手势应用拖动过滤器? (任何代码 sn-p 或参考可观)

2) 除 GPU 之外的任何其他第三方类可以帮助我们获得上述结果。

提前致谢!

【问题讨论】:

请同时发布一些代码 sn-ps 并解释您已经尝试过的内容或遇到的库。 @DroidDev,我已经尝试使用具有效果过滤器的github.com/CyberAgent/android-gpuimage。应用单个过滤器时它工作正常,但是当我尝试应用多个过滤器时它完全出错了。图像从随机点开始失真。 github.com/ragnraok/android-image-filter。你可以试试运动模糊功能 @Rndomcoder 谢谢,但这不是我要找的。​​span> 你找到解决这个问题的方法了吗? 【参考方案1】:

实现它的一种方法是使用附加纹理向片段着色器指定要应用的变形。当用户触摸图像以应用变形时,您可以从应用中修改纹理内容。

GPUImageBulgeDistortionFilter 扩展了 GPUImageFilter,它被设计为仅使用一种纹理。

您需要将纹理绑定 (glBindTexture) 和分配给 GPUImageFilter 中的片段着色器 (glUniform1i) 使用 1 作为新纹理(而不是 0)。您还需要复制 glGetUniformLocation 并使用其他名称代替 inputImageTexture,例如 inputImageTexture2。

在 GPUImageBulgeDistortionFilter 处修改片段着色器或创建一个派生自 GPUImageBulgeDistortionFilter 的新类添加“uniform sampler2D inputImageTexture2;\n” +

最后添加代码以使用 inputImageTexture2 纹素在同一个片段着色器中的 inputImageTexture 处对数据进行变形。

【讨论】:

以上是关于如何在 android 中实现 Drag Distortion Image 过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 中实现 vuetify?

React + TS 中实现鼠标水平拖动,横向滚动 | Mouse click and Drag Instead of Horizontal Scroll bar

React + TS 中实现鼠标水平拖动,横向滚动 | Mouse click and Drag Instead of Horizontal Scroll bar

如何在android中实现svm模型?

如何在android中实现BottomAppBar?

如何在 Xamarin.Android 中实现 RewardedAdLoadCallback?