【发布时间】:2021-12-29 09:29:47
【问题描述】:
我有一个CIFilter 管道。
它当前输出UIImage 使用:
private func renderImage(ciImage: CIImage) -> UIImage?
{
let cgImage = Filter.context.createCGImage(ciImage, from: ciImage.extent)
return cgImage.map(UIImage.init)
}
此UIImage 稍后会转换为 JPEG 并存储。
现在需要批量过滤图像并跳过UIImage 格式。这需要尽快完成。
Here 有几种方法可以做到这一点。
哪种方式最快?
【问题讨论】:
-
请注意:从 CIImage 到实际图像的转换永远不会很快,因为所有过滤器/转换都应用于转换(尽管它们已被优化)。如果速度真的很重要,请考虑使用 Accelerate 框架(即:developer.apple.com/documentation/accelerate/…)
-
@KirilS。作为 Accelerate 的新手,我想这意味着我必须自己实现 iOS 附带的 CIFilters 并重写 myMetal 过滤器?
-
哦,是的,使用金属过滤器是不值得的。我更多地考虑内置过滤器。从 CIImage 到 JPEG 的转换可能仍然很慢,尤其是对于 RAW 图像。但你会看到。祝你好运!
-
@KirilS。为什么不值得使用 Accelerate with Metal 过滤器? Metal 中不都是内置的 CIFilter 吗?
-
我的意思是如果图像的目标是位图,并且你正在使用一些内置的过滤器,你在浪费(可能很长)时间关于从 CIImage 转换为 CGImage / JPEG。相反,您可以直接在位图上使用 Accelerate(Apple 提供了一些很好的示例,说明如何使用 Accelerate 执行相同的内置过滤器)。但是,使用您的自定义过滤器,将它们转换为 Accelerate,调试这些过滤器,并测试是否可以通过转换为位图的速度来补偿失去的在 GPU 上运行的能力 - 这是不现实的。
标签: ios swift performance core-image ciimage