核心图像自动调整在 CPU 上渲染速度太慢
可以理解的是,与 GPU 相比,在 CPU 上渲染时,渲染会花费更多时间。然而,用iPhone 4的相机拍摄的照片太大,无法用GPU渲染,因此必须用CPU渲染。这对于核心图像滤镜效果很好,但从 autoAdjustmentFiltersWithOptions 返回的滤镜除外:渲染使用这些滤镜修改的 CIImage 时,需要 40 多秒的时间,而使用 GPU 则需要一瞬间的时间。
重现步骤:
- 在 iPhone 4 上使用大于 2048x2048 的图像创建 CIImage,在 iPhone 4S 上使用大于 4096x4096 的图像创建 CIImage。
- 在 CIImage 上调用 autoAdjustmentFiltersWithOptions: 方法。
- 将返回的过滤器应用到 CIImage。
- 将 CIImage 渲染为 CGImageRef。
预期结果: 与使用 GPU 渲染时相比,图像花费的时间要长几秒钟。
实际结果: 渲染需要 40 秒以上。
笔记: “照片”应用程序可以比此方法更快地增强大照片。表明 iPhone 4/4S 的硬件能够实现这一点,无论照片应用程序是否使用私有 API。
有人有什么建议吗?
Understandably, when rendering on the CPU as opposed to the GPU, the rendering will take much more time. However, photos taken with the iPhone 4's camera are too large to render with the GPU, so they must be rendered with the CPU. This works well for Core Image filters, except the filters returned from autoAdjustmentFiltersWithOptions: When rendering a CIImage modified with these filters, it takes 40+ seconds, as opposed to a split second with the GPU.
Steps to Reproduce:
- Create a CIImage with an image larger than 2048x2048 on an iPhone 4, or 4096x4096 on iPhone 4S.
- Call the method autoAdjustmentFiltersWithOptions: on the CIImage.
- Apply the returned filters to the CIImage.
- Render the CIImage to a CGImageRef.
Expected Results:
The image takes a few seconds longer than it would take when using the GPU to render.
Actual Results:
It takes upwards of 40 seconds to render.
Notes:
The Photos app can enhance large photos much faster than this method. Shows that the iPhone 4/4S's hardware is capable of achieving this, regardless of whether the Photos app uses private APIs or not.
Anyone have any advice?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
autoAdjustmentFiltersWithOptions
使用 CPU 来确定应用的过滤器。在调用之前尝试缩小图像,然后将滤镜应用到原始图像。另外,如果不需要,请考虑关闭红眼检测。autoAdjustmentFiltersWithOptions
uses the CPU to determine the applied filters. Try downscaling the image before calling that, then apply the filters to the original image. Also, consider turning off red eye detection if you don't need it.