2017-10-10 100 views
1

我已經使用CIVignette效果爲My Photo Editing應用程序。它基於Slider的Changing事件應用。我已經使用下面的代碼,我的問題是每當我增加滑塊的值Vignette效果出現,但每當我減少滑塊的值,Vignette效果不會減少。
請幫忙。無法降低使用UISlider的CIVignette效果

@IBAction func slider(_ sender: UISlider) { 

     let startImage = CIImage(image: imgEdited!)! 

     let vignetteFilter = CIFilter(name: "CIVignette")! 

     let radius = 5 

     vignetteFilter.setValue(startImage, forKey:kCIInputImageKey) 
     vignetteFilter.setValue(sender.value, forKey:"inputIntensity") 
     vignetteFilter.setValue(radius, forKey:"inputRadius") 

     let filteredImageData = vignetteFilter.value(forKey: kCIOutputImageKey) as! CIImage 
     let filteredImageRef = self.context.createCGImage(filteredImageData, from: filteredImageData.extent) 

     imgImage.image = UIImage.init(cgImage: filteredImageRef!) 
     self.imgEdited = imgImage.image 
} 

回答

2

下面的代碼基於我的回答對其他SOBlur effect using slider Is not working properly

@IBAction func slider(_ sender: UISlider) { 

    let startImage = CIImage(image: UIImage(named: "Your Image Name")!) // You should initialise your UIImage here not UIImageView 
    let vignetteFilter = CIFilter(name: "CIVignette")! 

    vignetteFilter.setValue(startImage, forKey:kCIInputImageKey) 
    vignetteFilter.setValue(sender.value, forKey:kCIInputIntensityKey) 
    vignetteFilter.setValue(5, forKey:kCIInputRadiusKey) 

    let filteredImageData = vignetteFilter.value(forKey: kCIOutputImageKey) as! CIImage 
    let filteredImageRef = self.context.createCGImage(filteredImageData, from: filteredImageData.extent) 

    self.imgView.image = UIImage.init(cgImage: filteredImageRef!) // Output 

} 

從辛輸出:

enter image description here

+1

這是否能順利執行?爲什麼不使用'GLKView'和單個'CIContext'?通過這種方式,您可以使用GPU,並可以在GLKView中渲染* current * CIImage,並在共享/保存時輸出「UIImage」。我猜你會看到性能增加5-10倍。 (當然,在模擬器中你會看到幾乎相同或更多的下降,但是儘可能利用這些GPU。) – dfd

+0

感謝您的評論@dfd。但是,'SO'在另一篇相關的文章中指出他不使用'GLKView'。 – Joe

+0

謝謝。仍然 - 表現如何?我發現動態使用滑塊來改變「CIFilter」,並創建一個「UIImage」......非常結構。從我在輸出示例中看到的情況來看,情況就是這樣。 – dfd