GPUImage capturePhotoAsImageProcessedUpToFilter仅适用于最后一个滤镜

乔·安德琳娜(Joe Andolina)

在我的应用程序中,我使用了3个过滤器的堆栈,并将其添加到stillCamera中。我正在尝试从filter1提取图像,它是一个空的过滤器,因此它返回了实际图像。

    [stillCamera addTarget:filter1];
[filter1 addTarget:filter2];
[filter2 addTarget:filter3];
[filter3 addTarget:cameraView];

当我调用capturePhotoAsImageProcessedUpToFilter时,仅当我将其传递给filter3时,它才返回图像,如下所示。

[stillCamera capturePhotoAsImageProcessedUpToFilter:filter3 with...

下面的两个示例从不返回图像

[stillCamera capturePhotoAsImageProcessedUpToFilter:filter1 with...
[stillCamera capturePhotoAsImageProcessedUpToFilter:filter2 with...

难道我做错了什么?作为修复,我正在使用:

[filter1 imageFromCurrentlyProcessedOutput]

调用capturePhotoAsImageProcessedUpToFilter和imageFromCurrentlyProcessedOutput有什么区别吗?

布拉德·拉森(Brad Larson)

我认为这是我去年尝试实施的内存保护优化的副作用。对于非常大的图像(例如照片),我尝试做的是随着过滤的图像通过滤镜链而破坏支持每个滤镜的帧缓冲区。想法是通过在任何时间点在内存中仅保留一个或两个大映像副本来尝试最大程度地减少内存高峰。

不幸的是,这似乎在很多时候都无法正常工作,而且由于随着图像的进行删除了帧缓冲区,因此只有链中的最后一个过滤器才能读取有效的帧缓冲区。我可能会在不久的将来选择这种优化,以支持内部帧缓冲区和纹理缓存,但是我不确定在此期间可以从链中的这些中间过滤器中读取哪些内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章