Как нанести CIFilter Прохладный и теплый тон на изображение в iOS? - PullRequest
0 голосов
/ 25 марта 2020

Я хочу использовать тот же фильтр, как показано на видео. Я использовал приведенный ниже код, но я не могу получить точный фильтр. Буду признателен, если кто-нибудь поможет мне.

var filter = CIFilter(name: "CITemperatureAndTint")!
let originalImage = self.imgView.image    // replace yourimage with the name of your image
let inputCIImage = CIImage(image: originalImage!)!
self.filter.setValue(inputCIImage, forKey: kCIInputImageKey)
let warmX = (sender.value) + 6500
let warmy = (5 + sender.value) + 380

self.filter.setValue(CIVector(x: CGFloat(warmX), y: 0), forKey: "inputNeutral")
self.filter.setValue(CIVector(x: 6500, y: 0), forKey: "inputTargetNeutral")
print("warm:\(warmX,warmy)")

Фильтр Ссылка на видео

1 Ответ

1 голос
/ 25 марта 2020

Чтобы получить точный фильтр, вы можете проверить цветовая температура , чтобы увидеть, какая цветовая температура приводит к тому или иному цвету. Вы также можете проверить этот вопрос , в котором объясняется использование векторов.

Затем вам следует структурировать свой код.

let originalImage = self.imgView.image    // replace yourimage with the name of your image
let inputCIImage = CIImage(image: originalImage!)!


var filter = CIFilter(name: "CITemperatureAndTint")!
filter.setValue(inputCIImage, forKey: kCIInputImageKey)
let warmX = (sender.value) + 6500
let warmy = (5 + sender.value) + 380 // Was never used

filter.setValue(CIVector(x: CGFloat(warmX), y: 0), forKey: "inputNeutral")
filter.setValue(CIVector(x: 6500, y: 0), forKey: "inputTargetNeutral")
print("warm:\(warmX,warmy)")

Затем вы должны поиграться с твой слайдер. В основном, холодный фильтр применяется с использованием этих значений:

filter.setValue(CIVector(x: 16000, y: 1000), forKey: "inputNeutral")
filter.setValue(CIVector(x: 1000, y: 500), forKey: "inputTargetNeutral")

И теплый фильтр достигается с использованием следующих значений:

filter.setValue(CIVector(x: 6500, y: 500), forKey: "inputNeutral")
filter.setValue(CIVector(x: 1000, y: 630), forKey: "inputTargetNeutral")

Для справки

...