Внутренняя ошибка CI, несоответствие типа между параметром ядра 1 и аргументом

Я пытаюсь создать CIColorClampFilter https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIColorClamp

В нем говорится, что я могу установить ключ для «inputMinComponents» как [0,0,0,0] или любые другие значения RGB, которые я хочу.

Но этот код:

filter = CIFilter(name:"CIColorClamp")
filter.setValue(ciImage, forKey: kCIInputImageKey)
filter.setValue([0,0,0,0], forKey: "inputMinComponents")

Вызывает эту ошибку:

CI internal error, type mismatch between kernel parameter 1 and argument

Я искал другие примеры CIColorClamp, но ничего не нашел.

Знаете ли вы, что не так со значением, которое я пытаюсь передать для ключа «inputMinComponents»?


person Aggressor    schedule 03.11.2014    source источник


Ответы (1)


По-видимому, интеллектуальное литье Swift не работает, вы должны явно создать CIVector

filter = CIFilter(name:"CIColorClamp")
filter.setValue(ciImage, forKey: kCIInputImageKey)
var lowerLevel = CIVector(x: 0.1, y: 0.1, z: 0.3, w: 0)
filter.setValue(lowerLevel, forKey: "inputMinComponents")
var upperLevel = CIVector(x: 0.5, y: 0.7, z: 0.9, w: 1)
filter.setValue(upperLevel, forKey: "inputMaxComponents")
person Aggressor    schedule 03.11.2014
comment
Swift не применяет все автоматически. На самом деле он требует явного приведения типов и преобразований в большем количестве мест, чем C. Однако вы можете заставить код в вашем вопросе работать с автоматическим преобразованием, если вы расширите CIVector соответствующей реализацией ArrayLiteralConvertible. - person rickster; 04.11.2014
comment
Спасибо за подсказкуXD - person Aggressor; 04.11.2014