2015-08-24 9 views
5

Ich baue eine iOS App, die auf Bildoperationen basiert.Helligkeit des Bildes mit UISlider erhöhen/verringern?

Ich möchte die Helligkeit des Bildes durch Slider-Wert erhöhen und verringern.

ich diesen Code verwendet haben, dies zu tun:

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

    } 

Nun meine Frage ist, dass, wenn ich Reglerwert erhöhen sie auch die Helligkeit des Bildes erhöhen, aber nur, wenn ich Schieberposition für die erste Zeit ändern.

Wenn bin ich wieder die Position des Schiebers ändert ich dieses errror bin immer: in Zeile

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

Dieser Fehler kommt:

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

Diesmal rawimgData Daten Null kommt.

+0

warum setzen Sie die ' "inputImage"' zweimal? Und darüber hinaus: Bist du dir sicher, was du zu tun versuchst? Laut der Dokumentation 'kCIInputBrightnessKey' ist nicht in iOS verfügbar ... nicht sicher, dass die Informationen jedoch wahr sind. – luk2302

+0

Ich habe meine Frage bearbeitet. kCIInputBrightnessKey arbeitet damit –

+0

Werfen Sie einen Blick auf diese Antwort http://Stackoverflow.com/a/15758267/2442804, um eine bessere Idee zu bekommen, wie dies funktionieren könnte und wo Ihre Fehler sind. – luk2302

Antwort

17

Ich fand Antwort auf meine Frage hier ist, wie ich Codieren getan habe.

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

Dieser Thread und Antwort ist erstaunlich. Ich weiß nicht, warum die Leute es abgelehnt haben. :(Vielen Dank! –

1

Sie können AlamofireImage verwenden, hier ist ein Beispiel dafür, wie Sie es tun können:

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