添加GPUImageFilter时,GPUImageView在已过滤视图和未过滤视图之间闪烁



我正在尝试显示一个带有实时相机馈送的GPUImageView(使用GPUImageStillCameraGPUImageVideoCamera),并在其下方显示一系列过滤器。当点击过滤器时,我希望它将该过滤器应用于实时馈送,以便GPUImageView显示相机输入的实时、过滤的馈送。我已经设置好了所有这些,但出于某种原因,当我点击几乎所有附带的GPUImageOutput过滤器(Vignette、Smooth Toon、Emboss等)时,视频提要都会疯狂地闪烁。它似乎在过滤视图和未过滤视图之间交替。当我切换到一个不同的过滤器时,我可以在切换到另一个过滤器之前的很小的一秒钟内判断出过滤器是否正常工作。

灰度和深褐色滤镜不会闪烁,而是只显示一半强度。我试着将深褐色滤镜的强度设置为1.0(以及其他一些值),但灰度滤镜没有任何设置可以更改,看起来有些东西是灰色的,但仍然有颜色。我试图拍摄灰度视图的屏幕截图,但当我查看屏幕截图时,图像要么是适当的灰度,要么根本不是灰度,尽管这不是我在实际设备上看到的。我的理论是,它在过滤视图和非过滤视图之间的切换非常快,因此产生了50%强度的灰度过滤器的错觉。

我不知道为什么会发生这种情况,因为标准的GPUImage示例项目运行得很好,而且我在项目中没有做太多不同的事情。

如果有人能帮助我,或者至少给我指明正确的方向,我将不胜感激。我已经连续三天尝试调试这个问题了,但我根本无法解决。

EDIT:当我在GPUImageStillCamera上调用capturePhotoAsImageProcessedUpToFilter时,它会为UIImage和完成块中的NSError返回nil(尽管GPUImageStillCamera不是零。不确定这是否相关,但我认为值得一提。

编辑2:我刚刚意识到它返回的是一个零图像,因为没有设置过滤器。但如果是这样的话,你如何在没有任何滤镜的情况下拍摄照片?这可能与我最初的问题有关吗?我设置了一个灰度过滤器(我仍然看到它的半强度版本),在完成块中返回的图像是实际的正确灰度图像,尽管实时提要看起来不同。

您可能有两个针对视图的输入。

如果没有看到你的代码,我就无法判断,但我发现用我所有的输入/输出绘制一张图确实有助于调试过滤器。

最新更新