2017-10-10 7 views
1

J'ai utilisé l'effet CIVignette pour l'application d'édition de photos. Il s'applique en fonction de l'événement Slider's Changing. J'ai utilisé le code suivant et mon problème est chaque fois que j'ai augmenté la valeur du curseur. L'effet Vignette est apparu mais chaque fois que je diminue la valeur du curseur, l'effet Vignette ne diminue pas.
S'il vous plaît, aidez-nous.Impossible de diminuer l'effet CIVignette à l'aide de UISlider

@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 
} 

Répondre

2

Ci-dessous le code basé sur ma réponse à l'autre SO après Blur 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 

} 

sortie du Sim:

enter image description here

+1

Est-ce bien performer? Pourquoi ne pas utiliser un 'GLKView' et un seul' CIContext'? De cette façon, vous utilisez le GPU et vous pouvez prendre le * courant * CIImage rendu dans le GLKView et sortir un 'UIImage' lors du partage/enregistrement. Je suppose que vous verrez une augmentation de performance de 5 à 10 fois. (Bien sûr, dans le simulateur, vous verrez à peu près la même - ou plus - diminuer, mais profitez de ces GPU quand vous le pouvez.) – dfd

+0

Merci pour votre commentaire @dfd. mais, 'SO' a souligné sur l'autre poste connexe son ne pas utiliser' GLKView'. – Joe

+0

Merci. Encore - comment est la performance? J'ai trouvé dynamiquement en utilisant un curseur pour modifier un 'CIFilter' et en créant un 'UIImage' pour être ... très stuttery. Et d'après ce que je vois dans votre exemple de sortie, c'est le cas ici. – dfd