ios - iOS 模拟器 10.2.1 上的模糊图像性能问题
问题描述
我用这段代码来模糊我的UIImage
extension UIImage {
func blurred(radius: CGFloat) -> UIImage {
let ciContext = CIContext(options: nil)
guard let cgImage = cgImage else { return self }
let inputImage = CIImage(cgImage: cgImage)
guard let ciFilter = CIFilter(name: "CIGaussianBlur") else { return self }
ciFilter.setValue(inputImage, forKey: kCIInputImageKey)
ciFilter.setValue(radius, forKey: "inputRadius")
guard let resultImage = ciFilter.value(forKey: kCIOutputImageKey) as? CIImage else { return self }
guard let cgImage2 = ciContext.createCGImage(resultImage, from: inputImage.extent) else { return self }
return UIImage(cgImage: cgImage2)
}
}
但是从这个操作返回图像需要很长时间。
实际上这个操作大约需要 2 秒:
guard let cgImage2 = ciContext.createCGImage(resultImage, from: inputImage.extent) else { return self
}
我没有在真机上测试过,但不确定代码是否有效
解决方案
该代码看起来不错,尽管您应该缓存它返回的图像,而不是尽可能重复调用它;正如马特在下面的评论中指出的那样,您还应该使用共享的 CIContext 而不是每次都设置一个新的。
您看到的性能问题是由于模拟器的性能特征与真实硬件有很大不同。听起来 Core Image 要么使用模拟器的模拟 OpenGL ES 接口(速度很慢),要么使用 CPU(速度较慢)。在 iOS 设备上测试它会让你更好地了解你应该期待的性能。
推荐阅读
- php - 谁能给我解释一下php代码
- android - 如何计算每秒钟在android中的当前互联网速度
- c# - Unity - C#试图在另一个列表中的对象被销毁时更改一个列表中的项目的标签
- python - 随机复制一个矩形随机区域并将其粘贴到numpy中的另一个图像上
- outlook - 将保存的电子邮件从共享文件夹移动到 Outlook 子文件夹
- c++ - “多个运算符>>匹配这些操作数。操作数类型为:std::ifstream&>>size_t”
- scala - 重构字符串列表的scala匹配案例
- c++ - 如何在本机 C++ 中跨线程调用(在主线程上回调)
- javascript - Ionic 3-如何在单击按钮时向下滚动内容?
- git - Anaconda 中的 Git 和 Jupyter Notebook