Frage Erhöhen / verringern Sie die Bildhelligkeit mit UISlider?


Ich baue eine iOS-App, die auf Bildoperationen basiert.

Ich möchte die Helligkeit des Bildes durch Schieberegler erhöhen und verringern.

Ich habe diesen Code verwendet, um 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 Slider Wert erhöhe es auch die Helligkeit des Bildes erhöhen, aber nur wenn ich Schieberegler Position zum ersten Mal ändern.

Wenn ich wieder die Position des Sliders ändere, bekomme ich diesen Fehler:

Schwerwiegender Fehler: beim Entpacken eines optionalen Werts wurde unerwartet "nil" gefunden.

Dieser Fehler tritt bei Zeile:

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

Diesmal rawimgData Daten kommen zu Null.


6
2017-08-24 09:50


Ursprung


Antworten:


Ich habe eine Antwort auf meine Frage gefunden, wie ich das gemacht 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;
  }
}

19
2017-08-28 04:06



Sie können verwenden AlamofireImageHier ist ein Beispiel, wie Sie es tun können:

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

1
2018-01-26 20:20