2015-08-24 25 views
5

Sto costruendo un'app per iOS basata sulle operazioni dell'immagine.Aumenta/riduci la luminosità dell'immagine utilizzando UISlider?

Desidero aumentare e ridurre la luminosità dell'immagine tramite il valore del cursore.

Ho usato questo codice per fare questo:

@IBOutlet var imageView: UIImageView! 
@IBOutlet var uiSlider : UISlider! 
override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     var image = UIImage(named: "54715869.jpg") 
     imageView.image = image 
     uiSlider.minimumValue = -0.2 
     uiSlider.maximumValue = 0.2 
     uiSlider.value = 0.0 
     uiSlider.maximumTrackTintColor = UIColor(red: 0.1, green: 0.7, blue: 0, alpha: 1) 
     uiSlider.minimumTrackTintColor = UIColor.blackColor() 
     uiSlider.addTarget(self, action: "brightnesssliderMove:", forControlEvents: UIControlEvents.TouchUpInside) 
     uiSlider.addTarget(self, action: "brightnesssliderMove:", forControlEvents: UIControlEvents.TouchUpOutside) 
    } 
    func brightnesssliderMove(sender: UISlider) 
    { 
     var filter = CIFilter(name: "CIColorControls"); 
     filter.setValue(NSNumber(float: sender.value), forKey: "inputBrightness") 
     var image = self.imageView.image 
     var rawimgData = CIImage(image: image) 
     filter.setValue(rawimgData, forKey: "inputImage") 
     var outpuImage = filter.valueForKey("outputImage") 
     imageView.image = UIImage(CIImage: outpuImage as CIImage) 

    } 

Ora la mia domanda è che quando ho aumentare il valore del cursore anche aumentare la luminosità dell'immagine, ma solo quando cambio posizione del cursore per la prima volta.

Quando sarò di nuovo cambiare la posizione del cursore sto ottenendo questo errror:

fatal error: unexpectedly found nil while unwrapping an Optional value.

Questo errore sta arrivando alla riga:

imageView.image = UIImage(CIImage: outpuImage as CIImage) 

Questa volta rawimgData dati provengono nullo.

+0

perché stai impostando il "inputImage" '' due volte? E oltre a questo: sei sicuro che quello che stai cercando di fare sta funzionando? Secondo la documentazione 'kCIInputBrightnessKey' non è disponibile in iOS ... non sono sicuro che le informazioni siano vere comunque. – luk2302

+0

ho modificato la mia domanda. kCIInputBrightnessKey sta funzionando con esso –

+0

Dai un'occhiata a questa risposta http://stackoverflow.com/a/15758267/2442804 per avere un'idea migliore su come questo potrebbe funzionare e dove sono i tuoi errori. – luk2302

risposta

17

Ho trovato la risposta alla mia domanda qui è come ho fatto la codifica.

import CoreImage 
class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate 
{ 
    var aCIImage = CIImage(); 
    var contrastFilter: CIFilter!; 
    var brightnessFilter: CIFilter!; 
    var context = CIContext(); 
    var outputImage = CIImage(); 
    var newUIImage = UIImage(); 

override func viewDidLoad() 
    { 
    super.viewDidLoad() 
    var aUIImage = imageView.image; 
    var aCGImage = aUIImage?.CGImage; 
    aCIImage = CIImage(CGImage: aCGImage) 
    context = CIContext(options: nil); 
    contrastFilter = CIFilter(name: "CIColorControls"); 
    contrastFilter.setValue(aCIImage, forKey: "inputImage") 
    brightnessFilter = CIFilter(name: "CIColorControls"); 
    brightnessFilter.setValue(aCIImage, forKey: "inputImage") 
    } 
func sliderContrastValueChanged(sender: UISlider) 
    { 
    contrastFilter.setValue(NSNumber(float: sender.value), forKey: "inputContrast") 
    outputImage = contrastFilter.outputImage; 
    var cgimg = context.createCGImage(outputImage, fromRect: outputImage.extent()) 
    newUIImage = UIImage(CGImage: cgimg)! 
    imageView.image = newUIImage; 
    } 
func sliderValueChanged(sender: UISlider) 
    { 
    brightnessFilter.setValue(NSNumber(float: sender.value), forKey: "inputBrightness"); 
    outputImage = brightnessFilter.outputImage; 
    let imageRef = context.createCGImage(outputImage, fromRect: outputImage.extent()) 
    newUIImage = UIImage(CGImage: imageRef)! 
    imageView.image = newUIImage; 
    } 
} 
+0

Questa discussione e risposta è sorprendente. Non so perché la gente lo abbia downsotato. :(Grazie! –

1

È possibile utilizzare AlamofireImage, ecco un esempio di come si può fare:

@IBAction func brightnessChanged(sender: UISlider) { 
     let filterParameters = ["inputBrightness": sender.value] 
     imageView.image = originalImage.af_imageWithAppliedCoreImageFilter("CIColorControls", filterParameters: filterParameters) 
    }