我正在开发一个照片过滤器应用程序,正如你所看到的,我添加了一个功能来调整对比度、亮度、饱和度和噪音。但问题是它们是独立工作的,这意味着当我调整亮度时,比如说,当我开始编辑对比度时,它会返回到原始亮度。
这里是一个预览,当我将亮度设置为最大(图像变白),然后尝试调整其对比度,滑块会更改原始图像的对比度。
在这里,我可以捕捉到释放滑块并将其值放在原始图像上的瞬间,正如您所看到的,在演示中,我将饱和度设置为0,然后将相同饱和图像的对比度更改为0。
。
现在的问题是,当我单击滑块而不更改其值时,它将当前值翻倍。例如,如果我将亮度5和饱和度10放在一起,并决定在单击亮度后立即调整亮度,它的值将加倍,我不知道为什么。
下面是一个例子。我只是点击滑块而不改变它的值。
这是密码
@objc func slidervaluedidchange(u sender:uislider!){
如果sender.tag==0{
让DisplayInPercentage:int=int((sender.value/200)*10000)
BrightnessValueLabel.Text=“(DisplayInPercentage)”)
selectedPictureImageView.image=原始图像
让beginimage=ciimage(image:selectedPictureImageView.image!)
self.filter=cifilter(名称:“cicolorcontrols”)
自我过滤器?.setvalue(beginimage,forkey:kciinputimagekey)
self.filter.setvalue(sender.value,forkey:kciinputBrightnessKey)
self.filteredimage=self.filter?超标
selectedPictureImageView.image=uiImage(cgImage:self.context.createCgImage(self.filteredImage!),来自:(self.filteredimage?程度)!!)
sliderValue=sender.value
}否则,如果sender.tag==1{
让DisplayInPercentage:int=int((sender.value/200)*10000)
对比度值label.text=“(DisplayInPercentage)”)
self.selectedPictureImageView.image=原始图像
让beginImage=ciimage(image:self.selectedPictureImageView.image!)
self.filter=cifilter(名称:“cicolorcontrols”)
自我过滤器?.setvalue(beginimage,forkey:kciinputimagekey)
self.filter.setvalue(sender.value,forkey:kciinputcontractkey)
self.filteredimage=self.filter?超标
self.selectedPictureImageView.image=uiImage(cgImage:self.context.createCgImage(self.filteredImage!),来自:(self.filteredimage?程度)!!)
sliderValue=sender.value
}否则,如果sender.tag==2{
让DisplayInPercentage:int=int((sender.value/200)*10000)
饱和值label.text=“(DisplayInPercentage)”)
self.selectedPictureImageView.image=原始图像
让beginImage=ciimage(image:self.selectedPictureImageView.image!)
self.filter=cifilter(名称:“cicolorcontrols”)
自我过滤器?.setvalue(beginimage,forkey:kciinputimagekey)
self.filter.setvalue(sender.value,forkey:kciinputstationkey)
self.filteredimage=self.filter?超标
self.selectedPictureImageView.image=uiImage(cgImage:self.context.createCgImage(self.filteredImage!),来自:(self.filteredimage?程度)!!)
sliderValue=sender.value
}否则,如果sender.tag==3{
让DisplayInPercentage:int=int((sender.value/200)*10000)
锐化值label.text=“(DisplayInPercentage)”)
self.selectedPictureImageView.image=原始图像
让beginImage=ciimage(image:self.selectedPictureImageView.image!)
self.filter=cifilter(名称:“ciunsharpmask”)
自我过滤器?.setvalue(beginimage,forkey:kciinputimagekey)
自滤波设定值(7,forkey:kciinputradiuskey)
self.filter.setvalue(sender.value,forkey:kciinputintensitykey)
self.filteredimage=self.filter?超标
self.selectedPictureImageView.image=uiImage(cgImage:self.context.createCgImage(self.filteredImage!),来自:(self.filteredimage?程度)!!)
sliderValue=sender.value
}
}
@objc func slidervaluedidend(u sender:uislider!){
如果sender.tag==0{
originalImage=selectedPictureImageView.image
sender.value=幻灯片值
打印(“未按下的按钮滑块值为\(sender.value)”)
}否则,如果sender.tag==1{
originalImage=selectedPictureImageView.image
sender.value=幻灯片值
打印(“未按下的按钮滑块值为\(sender.value)”)
}否则,如果sender.tag==2{
originalImage=selectedPictureImageView.image
sender.value=幻灯片值
打印(“未按下的按钮滑块值为\(sender.value)”)
}否则,如果sender.tag==3{
originalImage=selectedPictureImageView.image
sender.value=幻灯片值
打印(“未按下的按钮滑块值为\(sender.value)”)
}
}
< /代码>
我认为一切正常,我只是对过滤器值做了错误的计算。
这里是一个预览,当我把亮度最大化(图像变白),然后尝试调整它的对比度和滑块改变原始图像的对比度。
在这里,我可以捕捉到释放滑块并将其值放在原始图像上的瞬间,正如您所看到的,在演示中,我将饱和度设置为0,然后将相同饱和图像的对比度更改为0。
.
现在的问题是,当我单击滑块而不更改其值时,它将当前值翻倍。例如,如果我将亮度5和饱和度10放在一起,并决定在单击亮度后立即调整亮度,它的值将加倍,我不知道为什么。
下面是一个例子。我只是点击滑块而不改变它的值。
这是密码
@objc func sliderValueDidChange(_ sender: UISlider!) {
if sender.tag == 0 {
let displayinPercentage: Int = Int((sender.value/200) * 10000)
brightnessValueLabel.text = ("\(displayinPercentage)")
selectedPictureImageView.image = originalImage
let beginImage = CIImage(image: selectedPictureImageView.image!)
self.filter = CIFilter(name: "CIColorControls")
self.filter?.setValue(beginImage, forKey: kCIInputImageKey)
self.filter.setValue(sender.value, forKey: kCIInputBrightnessKey)
self.filteredImage = self.filter?.outputImage
selectedPictureImageView.image = UIImage(cgImage: self.context.createCGImage(self.filteredImage!, from: (self.filteredImage?.extent)!)!)
sliderValue = sender.value
} else if sender.tag == 1 {
let displayinPercentage: Int = Int((sender.value/200) * 10000)
contrastValueLabel.text = ("\(displayinPercentage)")
self.selectedPictureImageView.image = originalImage
let beginImage = CIImage(image: self.selectedPictureImageView.image!)
self.filter = CIFilter(name: "CIColorControls")
self.filter?.setValue(beginImage, forKey: kCIInputImageKey)
self.filter.setValue(sender.value, forKey: kCIInputContrastKey)
self.filteredImage = self.filter?.outputImage
self.selectedPictureImageView.image = UIImage(cgImage: self.context.createCGImage(self.filteredImage!, from: (self.filteredImage?.extent)!)!)
sliderValue = sender.value
} else if sender.tag == 2 {
let displayinPercentage: Int = Int((sender.value/200) * 10000)
saturationValueLabel.text = ("\(displayinPercentage)")
self.selectedPictureImageView.image = originalImage
let beginImage = CIImage(image: self.selectedPictureImageView.image!)
self.filter = CIFilter(name: "CIColorControls")
self.filter?.setValue(beginImage, forKey: kCIInputImageKey)
self.filter.setValue(sender.value, forKey: kCIInputSaturationKey)
self.filteredImage = self.filter?.outputImage
self.selectedPictureImageView.image = UIImage(cgImage: self.context.createCGImage(self.filteredImage!, from: (self.filteredImage?.extent)!)!)
sliderValue = sender.value
} else if sender.tag == 3 {
let displayinPercentage: Int = Int((sender.value/200) * 10000)
sharpenValueLabel.text = ("\(displayinPercentage)")
self.selectedPictureImageView.image = originalImage
let beginImage = CIImage(image: self.selectedPictureImageView.image!)
self.filter = CIFilter(name: "CIUnsharpMask")
self.filter?.setValue(beginImage, forKey: kCIInputImageKey)
self.filter.setValue(7, forKey: kCIInputRadiusKey)
self.filter.setValue(sender.value, forKey: kCIInputIntensityKey)
self.filteredImage = self.filter?.outputImage
self.selectedPictureImageView.image = UIImage(cgImage: self.context.createCGImage(self.filteredImage!, from: (self.filteredImage?.extent)!)!)
sliderValue = sender.value
}
}
@objc func sliderValueDidEnd(_ sender: UISlider!) {
if sender.tag == 0 {
originalImage = selectedPictureImageView.image
sender.value = sliderValue
print("Unpressed button slider value is \(sender.value)")
} else if sender.tag == 1 {
originalImage = selectedPictureImageView.image
sender.value = sliderValue
print("Unpressed button slider value is \(sender.value)")
} else if sender.tag == 2 {
originalImage = selectedPictureImageView.image
sender.value = sliderValue
print("Unpressed button slider value is \(sender.value)")
} else if sender.tag == 3 {
originalImage = selectedPictureImageView.image
sender.value = sliderValue
print("Unpressed button slider value is \(sender.value)")
}
}
我觉得一切都正常,我只是对过滤器值做了错误的计算。