使用UISlider增加/减少图像的亮度?

时间:2015-08-24 09:50:17

标签: ios swift image-processing uiimageview uislider

我正在构建一个基于图像操作的iOS应用程序。

我想通过滑块值增加和减少图像的亮度。

我已使用此代码执行此操作:

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

    }

现在我的问题是,当我增加滑块值时,它也会增加图像的亮度,但仅限于我第一次更改滑块位置时。

当我再次改变滑块的位置时,我得到了这个错误:

  

致命错误:在解包可选值时意外发现nil。

此错误正在排除:

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

此时rawimgData数据为零。

2 个答案:

答案 0 :(得分:23)

我发现我的问题的答案就是我如何编码。

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

答案 1 :(得分:2)

您可以使用AlamofireImage,以下是您可以执行此操作的示例:

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