使用滑块更改图像的对比度和亮度
Posted
技术标签:
【中文标题】使用滑块更改图像的对比度和亮度【英文标题】:change the contrast and brightness of image using slider 【发布时间】:2019-06-04 10:42:56 【问题描述】:我正在尝试,并且我以编程方式创建了一个滑块。当我尝试通过滑块改变对比度时,出现类似
的错误原因:'-[UISlider floatValue]:无法识别的选择器发送到实例 0x103c4ffa0'`func viewforslide() view.frame = CGRect.init(x: 10, y:view.frame.size.height - 180, width: self.view.frame.size.width - 20, height: 40) view.backgroundColor = UIColor.lightGray view.layer.cornerRadius = view.frame.size.height/2 view.addSubview(查看) 创建滑块()
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
`
如果有人帮助我做到这一点,那就太好了。提前致谢。
【问题讨论】:
函数viewforslide
在哪里?
你想做什么?在滑块方法中,您应该获取滑块值,而不是将值设置为滑块。同样在sliderDemo.addTarget(self, action: #selector(_sldComponentChangedValue),for: .valueChanged)
行_sldComponentChangedValue
应该像_sldComponentChangedValue(_ :)
这样它可以将值传递给方法参数(发件人)。
查看器幻灯片是我添加了此滑块的 UIView
我已经解决了..但现在无法正确应用我想做的对比度..
要求是......一旦我释放滑块,那么对比度应该应用于图像,否则它应该显示原始图像
【参考方案1】:
在将目标方法添加到sliderDemo
时,您已经给出了选择器 (_sldComponentChangedValue
),这是不对的,您的实际方法确实收到了一个参数。这就是方法名称的不同,所以在幻灯片上你会崩溃说“无法识别的选择器发送到实例”
改为如下操作
sliderDemo.addTarget(self, action: #selector(_sldComponentChangedValue(sender:)), for: .valueChanged);
【讨论】:
我已经解决了这个问题。 ..但现在无法正确应用我想要做的对比度..要求是..一旦我释放滑块,那么对比度应该应用于图像,否则它应该显示原始图像 @anisha 设置sliderDemo.isContinuous = false
而不是 true
【参考方案2】:
@anisha 如果您使以前的 Ans 复杂化。试试这个新代码。
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)
【讨论】:
以上是关于使用滑块更改图像的对比度和亮度的主要内容,如果未能解决你的问题,请参考以下文章