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

标签 ios swift image-processing uiimageview uislider

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

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

我已经使用这段代码来做到这一点:

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

    }

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

当我再次更改 slider 的位置时出现此错误:

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

此错误发生在行:

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

这次 rawimgData 数据为零。

最佳答案

我在这里找到问题的答案是我是如何完成编码的。

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

关于ios - 使用 UISlider 增加/减少图像的亮度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32179251/

相关文章:

python - 如何使用 Python 中的计算机视觉/图像处理确定视频中的帧/图像是否处于夜视模式?

python - 在 NumPy 数组中为每个唯一元素选择一个随机索引,并考虑引用数组中缺失的元素

android - 如何在没有 API 的情况下在 Android 中执行图像处理?

android - 使用 libgdx 在 Android/iOS 上开发 2D 游戏需要 Mac?

ios - 在 Swift 中,如何在从 App Extension 目标运行时忽略部分代码?

ios - ios 11 中通知负载的大小是多少?

从 Swift 字符串转换为 const char*

swift - 在 SKLabels 的 Sprite-kit 中创建 "fly-in"效果

objective-c - KVO 和更改 UI 值更改

ios - UIPopoverBackgroundView contentViewInsets 必须由子类实现