2017-08-17 15 views
0

Je cherchais depuis quelques jours comment implémenter un filtre sur un UIImage en manipulant manuellement la luminosité, le contraste, les hautes lumières, les ombres, la chaleur et etc. en utilisant un UISlider?Comment régler la saturation du contraste de la luminosité dans swift avec un UISlider

Voici mon code qui est actuellement utilisé pour régler la luminosité ..

let currentValue = Int(editPictureView.sliderView.value) 
editPictureView.currentPropertyValue.text = String(currentValue) + " "  
brightnessFilter.setValue(NSNumber(value: editPictureView.sliderView.value), forKey: "inputBrightness") 
outputImage = brightnessFilter.outputImage! 
//let imageRef = context.createCGImage(outputImage, from: outputImage.extent) 
newUIImage = UIImage(ciImage: outputImage) 
editPictureView.selectedImageToEdit.image = newUIImage; 

Mais je reçois une erreur qui indique qu'il a trouvé un nil tout déballer. Tout ce que je vous demande, c'est que vous partagiez ce sentiment ressenti lorsque vous avez résolu ce problème la première fois, et si vous pouvez l'expliquer, vous le comprendrez mieux vous-même, ou du moins comme le veut l'histoire. Mais honnêtement, je vous remercie d'avance.

+0

Qu'est-ce que 'brightnessFilter'? Veuillez inclure sa déclaration dans la question. En outre, n'utilisez jamais le déballage forcé des options sauf si vous êtes à 100%, ils auront une valeur non nulle au moment où vous les déballez. –

+0

essayez ceci https://stackoverflow.com/questions/24080435/how-can-i-increase-decrease-the-brightness-of-uiimage-and-i-need-to-save-the-res –

+0

De loin, le moyen le plus efficace - la performance en particulier - est d'utiliser (1) trois curseurs distincts, un pour la luminosité, la saturation et le contraste avec (2) avec CoreImage CIColorControls (https://developer.apple.com/library/content /documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIColorControls), et (3) affiche la sortie CIImage en utilisant un 'GLKView', qui utilise le GPU. Le lien ci-dessus a un commentaire sur la réponse à propos de la consommation de mémoire, et l'utilisation d'un UIImage ou de tout autre UIKit lié souffrira de mauvaises performances. – dfd

Répondre

0
func imageBrightness(imgView : UIImageView , sliderValue : CGFloat, image: UIImage){ 
     let aCGImage = image.cgImage 
     aCIImage = CIImage(cgImage: aCGImage!) 
     context = CIContext(options: nil) 
     brightnessFilter = CIFilter(name: "CIColorControls") 
     brightnessFilter.setValue(aCIImage, forKey: "inputImage") 

     brightnessFilter.setValue(sliderValue, forKey: "inputBrightness") 
     outputImage = brightnessFilter.outputImage! 
     let cgimg = context.createCGImage(outputImage, from: outputImage.extent) 
     newUIImage = UIImage(cgImage: cgimg!) 
     imgView.image = newUIImage 
     print("brightness") 
    } 

Appelez cette méthode et passer la valeur du curseur et de l'image comme suit: imageBrightnessEdit (imgView: self.imgView, SliderValue: CGFloat (valeur), l'image: imgSelected)

Par contraste:

func imageContrast(imgView : UIImageView , sliderValue : CGFloat, image: UIImage){ 

     let aUIImage = image 
     let aCGImage = aUIImage.cgImage 

     aCIImage = CIImage(cgImage: aCGImage!) 
     context = CIContext(options: nil) 
     contrastFilter = CIFilter(name: "CIColorControls") 
     contrastFilter.setValue(aCIImage, forKey: "inputImage") 

     aCIImage = CIImage(cgImage: aCGImage!) 
     context = CIContext(options: nil) 
     contrastFilter = CIFilter(name: "CIColorControls") 
     contrastFilter.setValue(aCIImage, forKey: "inputImage") 
     contrastFilter.setValue(sliderValue, forKey: "inputContrast") 
     outputImage = contrastFilter.outputImage! 
     let cgimg = context.createCGImage(outputImage, from: outputImage.extent) 
     newUIImage = UIImage(cgImage: cgimg!) 
     imgView.image = newUIImage 
     print("contrast") 

    } 
+0

Ok J'ai un problème en ce moment, j'utilise un UISlider pour changer la luminosité et le contraste, sauf qu'après avoir implémenté le code ci-dessus, mon UISlider est en retard, cela vous dérangerait-il de me faire quelques recommandations? capable de résoudre ce problème. –

+0

Peut être la résolution de vos imgae est élevé. Vous pouvez utiliser le fil d'expédition. – Dev