2014-11-03 88 views
0

我想创建一个CIColorClampFilter https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIColorClampCI内部错误,内核参数1和参数

它说我可以设置一个键“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”键传递的值有什么问题吗?

回答

2

显然SWIFT的智能铸件不工作,你必须explcitly创建一个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") 
+1

斯威夫特没有自动转换的一切。实际上,它需要在比C更多的地方进行明确的转换和转换。尽管如此,如果你用适当的'ArrayLiteralConvertible'实现扩展'CIVector',你可以让自己的问题中的代码工作。 – rickster 2014-11-04 01:55:36

+0

谢谢你的提示XD – Aggressor 2014-11-04 03:54:05