Как синхронизировать настройки фильтров? - PullRequest
0 голосов
/ 07 августа 2020

Когда я начинаю настраивать первый ползунок, настройки второго теряются. Можно ли синхронизировать c все параметры?

@ IBAction fun c amountSliderValueChanged (_ sender: UISlider) {

            let sliderValue = amountSlider.value
    
            filter = CIFilter(name: "CIColorControls")
            filter.setValue(beginImage, forKey: kCIInputImageKey)
            filter.setValue(sliderValue, forKey: kCIInputBrightnessKey)
    
            context = CIContext(options:nil)
            
           let cgimg = context.createCGImage(filter.outputImage!, from: filter.outputImage!.extent)
            let newImage = UIImage(cgImage: cgimg!)
            self.imageView.image = newImage
    
        }
        

@ IBAction fun c ExpositionSlider (_ sender : UISlider) {

            let sliderValue = exposureSlider.value
            filter = CIFilter(name:"CIVignette")!
            filter.setValue(beginImage, forKey:kCIInputImageKey)
            filter.setValue(sliderValue * 2, forKey:"inputIntensity")
            filter.setValue(sliderValue * 30, forKey:"inputRadius")
    
          context = CIContext(options:nil)
          
          let cgimg = context.createCGImage(filter.outputImage!, from: filter.outputImage!.extent)
          let newImage = UIImage(cgImage: cgimg!)
          self.imageView.image = newImage }

1 Ответ

0 голосов
/ 10 августа 2020

Вам всегда нужно применять оба фильтра при изменении любого ползунка, например, путем извлечения обновления в функцию, которую вы вызываете в обоих IBActions:

func updateImage() {
    let brightnessValue = self.amountSlider.value
    let exposureValue = self.exposureSlider.value

    colorControlsFilter = CIFilter(name: "CIColorControls")
    colorControlsFilter.setValue(beginImage, forKey: kCIInputImageKey)
    colorControlsFilter.setValue(brightnessValue, forKey: kCIInputBrightnessKey)
    let colorControlsOutput = colorControlsFilter.outputImage!

    vignetteFilter = CIFilter(name:"CIVignette")!
    vignetteFilter.setValue(colorControlsOutput, forKey:kCIInputImageKey)
    vignetteFilter.setValue(exposureValue * 2, forKey:"inputIntensity")
    vignetteFilter.setValue(exposureValue * 30, forKey:"inputRadius")
    let vignetteOutput = vignetteFilter.outputImage!

    // Don't create a CIContext every time! Init it once and re-use it.
    let cgImage = self.context.createCGImage(vignetteOutput, from: vignetteOutput.extent)
    let newImage = UIImage(cgImage: cgImage!)
    self.imageView.image = newImage
}
...