【发布时间】:2020-01-21 21:17:39
【问题描述】:
我是 Swift 的初学者,并制作了一个应用程序“照片编辑器”。我有个问题。我需要对一个图像应用一些过滤器。我有四个滑块(棕褐色、对比度、亮度、饱和度)和一个图像。我想将所有这些过滤器应用于我的图像。
我尝试在代码中更改我的逻辑,但我遇到了同样的问题
@objc func sliderValueDidChange(sender: UISlider!)
if sender.tag == 0 {
let originalCIImage = CIImage(image: self.image!)
let value = sender.value
self.sepiaLabelValue.text = String(Int(value*100))
if let sepiaCIImage = sepiaFilter(originalCIImage!, intensity: Double(value)) {
filteredImage = sepiaCIImage
self.imageView.image = UIImage(ciImage: sepiaCIImage)
}
} else if sender.tag == 1 {
let originalCIImage = CIImage(image: self.image!)
let value = sender.value
self.brightnessValue.text = String(Int(value*100))
if let brightnessCIImage = brightnessFilter(originalCIImage!, intensity: Double(value)) {
filteredImage = brightnessCIImage
self.imageView.image = UIImage(ciImage:brightnessCIImage)
}
} else if sender.tag == 2 {
let originalCIImage = CIImage(image: self.image!)
let value = sender.value
self.contrastLabel.text = String(Int(value*100))
let contrastCIImage = contrastFilter(originalCIImage!, intensity: Double(value))
self.imageView.image = UIImage(ciImage:contrastCIImage!)
} else if sender.tag == 3 {
let originalCIImage = CIImage(image: self.image!)
let value = sender.value
self.saturationValue.text = String(Int(value*100))
let saturationCIImage = saturationFilter(originalCIImage!, intensity: Double(value))
self.imageView.image = UIImage(ciImage:saturationCIImage!)
}
}
func sepiaFilter(_ input: CIImage, intensity: Double) -> CIImage?
{
let sepiaFilter = CIFilter(name:"CISepiaTone")
sepiaFilter?.setValue(input, forKey: kCIInputImageKey)
sepiaFilter?.setValue(intensity, forKey: kCIInputIntensityKey)
return sepiaFilter?.outputImage
}
func brightnessFilter(_ input: CIImage, intensity: Double) -> CIImage? {
let brightnessFilter = CIFilter(name: "CIColorControls")
brightnessFilter?.setValue(input, forKey: kCIInputImageKey)
brightnessFilter?.setValue(intensity, forKey: kCIInputBrightnessKey)
return brightnessFilter?.outputImage
}
func contrastFilter(_ input: CIImage, intensity: Double) -> CIImage? {
let contrastFilter = CIFilter(name: "CIColorControls")
contrastFilter?.setValue(input, forKey: kCIInputImageKey)
contrastFilter?.setValue(intensity, forKey: kCIInputContrastKey)
return contrastFilter?.outputImage
}
func saturationFilter(_ input: CIImage, intensity: Double) -> CIImage? {
let saturationFilter = CIFilter(name: "CIColorControls")
saturationFilter?.setValue(input, forKey: kCIInputImageKey)
saturationFilter?.setValue(intensity, forKey: kCIInputSaturationKey)
return saturationFilter?.outputImage
}
当我应用第一个过滤器然后下一个过滤器时,第一个过滤器的值被建立为开始状态。如何将所有过滤器应用于我的图像?
【问题讨论】:
-
使用
switch而不是else if。它更容易理解并且工作原理相同。 -
好吧。我改变了这个,但它并没有解决我的问题(((
-
好的,谢谢您的信息!但这对我来说很难,因为我不知道它如何应用于我的代码。大体理解了链的意思,但是不知道怎么重写代码
标签: ios swift uiimageview uikit cifilter