Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Dagmawi NadewОтветов: 1

Последние пару дней я искал, как реализовать фильтр для 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 при распаковке. Все, о чем я прошу вас, это поделиться тем чувством, которое вы испытали, когда впервые решили эту задачу, и если вы сможете объяснить это, вы также лучше поймете это сами или, по крайней мере, так, как гласит история. Но если честно заранее спасибо.

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

swiftcifilterciimageuislider

Ответы

Ответ 1 · рейтинг 2 · Dev

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")

    }

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы