1

在我的应用程序中,我使用了一组 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 有什么区别吗?

4

1 回答 1

1

我认为这是我去年尝试实施的内存保护优化的副作用。对于非常大的图像,比如照片,我尝试做的是在过滤后的图像通过过滤器链时破坏支持每个过滤器的帧缓冲区。这个想法是通过在任何时间点仅在内存中保留一到两个大图像副本来尝试最小化内存峰值。

不幸的是,这似乎在很多时候都没有按预期工作,并且由于帧缓冲区随着图像的进展而被删除,因此只有链中的最后一个过滤器最终具有可读取的有效帧缓冲区。我可能会在不久的将来的某个时候取消这种优化,以支持内部帧缓冲区和纹理缓存,但我不确定在此期间可以做什么来从链中的这些中间过滤器中读取。

于 2014-01-14T16:51:10.677 回答