Я новичок в 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
}
Когда я применяю первый фильтр, а затем следующий фильтр, значение первого фильтра устанавливается в состояние начала,Как я могу применить все фильтры к своему изображению?