Как настроить насыщенность контраста яркости в Swift с помощью UISlider

Последние пару дней я искал, как реализовать фильтр для UIImage, вручную манипулируя яркостью, контрастностью, бликами, тенями, теплом и т. д., используя UISlider?

Вот мой код, который в настоящее время используется для регулировки яркости.

let currentValue = Int(editPictureView.sliderView.value)
editPictureView.currentPropertyValue.text = String(currentValue) + " "    
brightnessFilter.setValue(NSNumber(value: editPictureView.sliderView.value), forKey: "inputBrightness")
outputImage = brightnessFilter.outputImage!
//let imageRef = context.createCGImage(outputImage, from: outputImage.extent)
newUIImage = UIImage(ciImage: outputImage)
editPictureView.selectedImageToEdit.image = newUIImage;

Но я получаю сообщение об ошибке, в котором говорится, что он нашел nil при распаковке. Все, о чем я прошу вас, это поделиться тем чувством, которое вы испытали, когда впервые решили эту задачу, и если вы сможете объяснить это, вы также лучше поймете это сами или, по крайней мере, так, как гласит история. Но если честно заранее спасибо.


person Dagmawi Nadew    schedule 17.08.2017    source источник
comment
Что такое brightnessFilter? Пожалуйста, включите его объявление в вопрос. Кроме того, никогда не используйте принудительную распаковку необязательных параметров, если вы не на 100% уверены, что к моменту их распаковки они будут иметь ненулевое значение.   -  person Dávid Pásztor    schedule 17.08.2017
comment
попробуйте это « title = «как я могу увеличить, уменьшить яркость uiimage, и мне нужно сохранить разрешение»> stackoverflow.com/questions/24080435/   -  person Gyanendra Singh    schedule 17.08.2017
comment
На сегодняшний день наиболее эффективным способом, в частности производительности, является использование (1) трех отдельных ползунков, по одному для яркости, насыщенности и контрастности, и (2) с помощью CoreImage CIColorControls (developer.apple.com/library/content/ документация/) и (3) отображать выходные данные CIImage с помощью GLKView, использующего графический процессор. В приведенной выше ссылке есть комментарий к ответу о потреблении памяти, и использование UIImage или чего-либо, связанного с UIKit, приведет к снижению производительности.   -  person dfd    schedule 17.08.2017


Ответы (1)


func imageBrightness(imgView : UIImageView , sliderValue : CGFloat, image: UIImage){
        let aCGImage = image.cgImage
        aCIImage = CIImage(cgImage: aCGImage!)
        context = CIContext(options: nil)
        brightnessFilter = CIFilter(name: "CIColorControls")
        brightnessFilter.setValue(aCIImage, forKey: "inputImage")

        brightnessFilter.setValue(sliderValue, forKey: "inputBrightness")
        outputImage = brightnessFilter.outputImage!
        let cgimg = context.createCGImage(outputImage, from: outputImage.extent)
        newUIImage = UIImage(cgImage: cgimg!)
        imgView.image = newUIImage
        print("brightness")
    }

Вызовите этот метод и передайте значение ползунка и изображение следующим образом: imageBrightnessEdit(imgView: self.imgView, sliderValue: CGFloat(value), image: imgSelected)

Для контраста:

func imageContrast(imgView : UIImageView , sliderValue : CGFloat, image: UIImage){

        let aUIImage = image
        let aCGImage = aUIImage.cgImage

        aCIImage = CIImage(cgImage: aCGImage!)
        context = CIContext(options: nil)
        contrastFilter = CIFilter(name: "CIColorControls")
        contrastFilter.setValue(aCIImage, forKey: "inputImage")

        aCIImage = CIImage(cgImage: aCGImage!)
        context = CIContext(options: nil)
        contrastFilter = CIFilter(name: "CIColorControls")
        contrastFilter.setValue(aCIImage, forKey: "inputImage")
        contrastFilter.setValue(sliderValue, forKey: "inputContrast")
        outputImage = contrastFilter.outputImage!
        let cgimg = context.createCGImage(outputImage, from: outputImage.extent)
        newUIImage = UIImage(cgImage: cgimg!)
        imgView.image = newUIImage
        print("contrast")

    }
person Dev    schedule 17.08.2017
comment
Хорошо, у меня сейчас проблема, я использую UISlider для изменения яркости и контрастности, за исключением того, что после реализации данного кода выше мой UISlider отстает, не могли бы вы дать мне пару рекомендаций относительно того, как я мог бы чтобы исправить это. - person Dagmawi Nadew; 17.08.2017
comment
Может быть разрешение вашего imgae высокое. Вы можете использовать поток отправки. - person Dev; 19.08.2017