简体   繁体   English

使用滑块更改图像的对比度和亮度

[英]change the contrast and brightness of image using slider

I am trying to change the contrast and brightness of an image using the slider, and I have created a slider programatically. 我试图使用滑块更改图像的对比度和亮度,我已经以编程方式创建了一个滑块。 When I am trying to vary the contrast by the slider, am getting an error like 当我试图通过滑块改变对比度时,我得到一个错误

reason: '-[UISlider floatValue]: unrecognized selector sent to instance 0x103c4ffa0'`func viewforslide(){ vieew.frame = CGRect.init(x: 10, y:view.frame.size.height - 180, width: self.view.frame.size.width - 20, height: 40) vieew.backgroundColor = UIColor.lightGray vieew.layer.cornerRadius = vieew.frame.size.height/2 view.addSubview(vieew) createslider() } 原因:' - [UISlider floatValue]:无法识别的选择器发送到实例0x103c4ffa0'`func viewforslide(){vieew.frame = CGRect.init(x:10,y:view.frame.size.height - 180,width:self。 view.frame.size.width - 20,height:40)vieew.backgroundColor = UIColor.lightGray vieew.layer.cornerRadius = vieew.frame.size.height / 2 view.addSubview(vieew)createslider()}

func createslider(){
    var sliderDemo = UISlider(frame:CGRect(x: 15, y: 5, width: vieew.frame.size.width - 30, height: 30))
    sliderDemo.minimumValue = 0.0
    sliderDemo.maximumValue = 1000.0
    sliderDemo.isContinuous = true
    sliderDemo.tintColor = UIColor.black
    sliderDemo.value = 500.0
    sliderDemo.addTarget(self, action:  #selector(_sldComponentChangedValue),for: .valueChanged)
    vieew.addSubview(sliderDemo)
}


@IBAction func _sldComponentChangedValue(sender: UISlider) {
  //  Set value to the nearest int
    sender.setValue(Float(roundf(sender.value)), animated: false)
    let newvalforslider = sender
    print("\(newvalforslider)")

    let displayinPercentage: Int = Int((sender.value/200) * 10000)
  //  contrastValueLabel.text = ("\(displayinPercentage)")
    self.imageView.image = results.enhancedImage
    let beginImage = CIImage(image: self.imageView.image!)
    let filter = CIFilter(name: "CIColorControls")
    filter?.setValue(beginImage, forKey: kCIInputImageKey)
    filter?.setValue(sender.value, forKey: kCIInputContrastKey)
    var filteredImage = filter?.outputImage
    var context = CIContext(options: nil)
    imageView.image = UIImage(cgImage: context.createCGImage(filteredImage!, from: (filteredImage?.extent)!)!)
    var sliderValue = sender.value

}

` `

If anyone helps me to do this, would be great. 如果有人帮助我这样做,那就太好了。 Thanks in advance. 提前致谢。

While adding target method to sliderDemo you have given selector ( _sldComponentChangedValue ), which is not right, your actual method does receives an argument. 在向sliderDemo添加目标方法时,你已经给出了选择器( _sldComponentChangedValue ),这是不对的,你的实际方法确实接收了一个参数。 That's the difference in methods name, so on slide you gets crash saying " unrecognized selector sent to instance " 这是方法名称的不同之处,所以在幻灯片上你会崩溃说“ 无法识别的选择器发送到实例

instead do as follows 而是做如下

sliderDemo.addTarget(self, action: #selector(_sldComponentChangedValue(sender:)), for: .valueChanged);

@anisha If you complicate previous Ans. @anisha如果你复杂以前的Ans。 try this new code. 试试这个新代码。

func increaseContrast(_ image: UIImage) -> UIImage {
    let inputImage = CIImage(image: image)!
    let parameters =
    [
       "inputContrast": NSNumber(value: 2) // set how many contrast you want  
    ]
    let outputImage = inputImage.applyingFilter("CIColorControls", 
         parameters: parameters)
    let context = CIContext(options: nil)
    let img = context.createCGImage(outputImage, from: outputImage.extent)!
    return UIImage(cgImage: img)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM