GPUImage过滤器链接多个任意GPUImageFilters

时间:2014-12-10 00:45:18

标签: ios objective-c iphone swift gpuimage

我们正在构建一些照片调整工具,大多数是以这种方式构建的:

  • 原始图片
  • GPUImageLookupFilter创建新图像
  • GPUImageAlphaBlendFilter然后将GPUImageLookupFilter生成的图像与原始图像混合

每次调整都有这样的代码:

var blendFilter = GPUImageAlphaBlendFilter()
var mix = getValue() // assume this exists
blendFilter.mix = mix

var styledImageSource = getImageSource() // assume returns a GPUImagePicture
styledImageSource.addTarget(blendFilter, atTextureLocation: 1)
blendFilter.useNextFrameForImageCapture()
styledImageSource.processImage()

return blendFilter

最后,如果只有一个混合,我们运行此代码:

var originalImage = getOriginalImage() // assume gets an UIImage that we want to filter
filter = getBlendFilter() // assume this calls the above and gets a blendFilter
var finalImage = filter.imageByFilteringImage(originalImage)

上面的finalImage很棒并且混合了。

但是现在,我们有许多不同的调整工具可以做各种事情。让我们假设有些是混合,但他们需要做最后的imageByFilteringImage。我们希望将它们链接起来,这样我们就不会在每个图像之间创建图像,而是希望将它们链接起来。

以下是我们尝试过的一些概念:

  • 遍历每一个并在每个之间保存一个中间UIImage,它可以正常工作但很慢并在经过一些调整后杀死内存。
  • 尝试过滤将许多混合过滤器链接在一起。它仅将最后一个过滤器应用于最终图像。我们无法找到"保存"每个之间的中间图像。

我想的是另一种方式,也许是过滤器组?

我们如何最好地解决这个问题?

谢谢!

0 个答案:

没有答案