在iOS上使用CIFilter创建图像会导致渲染速度非常慢

时间:2016-04-17 00:34:04

标签: ios swift

我使用CIFilter创建一个UIImage,然后将其添加到UIImageView上。创建此图像的过程非常快,我可以将其添加到图像视图中。但是整个UI会冻结几秒钟,直到它显示过滤后的图像。我检查了CIFilter调用是否很快。我认为缓慢是由UIImageView渲染图像引起的。如果图像已经创建,为什么这么慢?下面是制作图像过滤器的代码。

func photoEffectChrome() -> CIFilter {
    let filter = CIFilter(name: "CIPhotoEffectChrome")!
    return (filter)
}

func outputImage(filter: CIFilter, originalImage: UIImage) -> UIImage{
    print(filter)
    let inputImage = CIImage(image: originalImage)
    filter.setValue(inputImage, forKey: kCIInputImageKey)
    let cgImage = context!.createCGImage(filter.outputImage!, fromRect: (filter.outputImage?.extent)!)
    return UIImage(CGImage: cgImage, scale: 1, orientation: originalImage.imageOrientation)
}

对上述方法的调用发生在后台线程上,然后我使用blow方法将它添加到滚动视图上。

dispatch_async(dispatch_get_main_queue(), {
            self.filterScrollView.addSubview(uiView)
        })

如果我注释掉“self.filterScrollView.addSubview(uiView)”,则UI会顺利运行。为什么渲染图像需要很长时间?更具体地说,它发生在模拟器上。在设备上运行时,它的工作速度要快得多。

1 个答案:

答案 0 :(得分:0)

  

但整个用户界面会冻结几秒钟,直到显示过滤后的图片

这种问题表明在后台线程上调用了设置UIImageView的image(未在问题中显示)的方法。你不能这样做。