【问题标题】:CI internal error, type mismatch between kernel parameter 1 and argumentCI 内部错误,内核参数 1 和参数之间的类型不匹配
【发布时间】:2014-12-30 17:21:12
【问题描述】:

我正在尝试创建一个 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”键传递的值有什么问题吗?

【问题讨论】:

    标签: xcode uiimage core-graphics core-image cifilter


    【解决方案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")
    

    【讨论】:

    • Swift 不会自动转换所有内容。事实上,它需要在比 C 更多的地方进行显式转换和转换。但是,如果您使用适当的 ArrayLiteralConvertible 实现扩展 CIVector,则可以使问题中的代码与自动转换一起使用。
    • 感谢您的提示 XD
    猜你喜欢
    • 2016-03-03
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2018-09-30
    • 2013-09-26
    • 2017-10-17
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多