2016-06-12 2 views
2

У меня есть приложение, где при выборе UICollectionViewCell с некоторым фильтром он реализует этот фильтр для моего UIImage. Но это применяется так медленно и с замораживанием. Как я могу повысить скорость реализации фильтров изображений на моих изображениях?Как я могу повысить скорость реализации фотофильтров?

func applyFilter(image: UIImage) -> UIImage { 
    var filter = CIFilter(name: "CIColorCube") 
    filter!.setValue(colorCubeData, forKey: "inputCubeData") 
    filter!.setValue(kDimension, forKey: "inputCubeDimension") 

    let sourceImage = CIImage(image: image) 

    filter.setValue(sourceImage, forKey: kCIInputImageKey) 
    let context = CIContext(options: nil) 

    let outputCGImage = context.createCGImage(filter.outputImage!, fromRect: filter.outputImage!.extent) 

    let newImage = UIImage(CGImage: outputCGImage, scale: 1.0, orientation: self.imageView.image!.imageOrientation) 

    return newImage 
} 

это мой код фильтра. И я призываю, что в

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("filterCell", forIndexPath: indexPath) as! FiltersCollectionViewCell 

    let op1 = NSBlockOperation {() -> Void in 
     NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 
       cell.imageView.image = self.applyFilter(image: self.croppedImage!) 
     }) 
    } 

    self.queue!.addOperation(op1); 

    return cell 
} 
+0

Вы можете позволить ему выполнить в фоновом режиме и показать загрузочный бар, пока он не будет готов? – Eric

+0

Вы пытались уменьшить масштаб изображения? Я бы запускал Time Profiler, чтобы найти наиболее интенсивный код, который вам нужно оптимизировать. –

ответ

1

Создание CIContext является дорогостоящей операцией - вы должны создать его один раз использовать его.

Возможно, вам также потребуется изучить цель визуализации GPU, такую ​​как GLKView, которая ускорит работу.

Смежные вопросы