将UIColor(扩展范围sRGB)转换为CIColor

3
当我在iOS 10.2.1上运行以下Swift 3.0.1代码时:
let color = CIColor(color: UIColor(hue: 0.72, saturation: 1.00, brightness: 0.78, alpha: 1));

我遇到了以下错误:
``` '*** -CIColor not defined for the UIColor UIExtendedGrayColorSpace 1 1; need to first convert colorspace.' ```
根据文档:
``` 该颜色对象。此对象表示的颜色信息在 RGB 颜色空间中。在链接 iOS 10 或更高版本的应用程序上,该颜色在扩展范围 sRGB 颜色空间中指定。在早期版本的 iOS 上,该颜色在设备 RGB 颜色空间中指定。 ```
来源:https://developer.apple.com/reference/uikit/uicolor/1621931-init 现在 CIColor 在设备 RGB 颜色空间中,而 UIColor 在扩展 sRGB 颜色空间中,因此如何从这个 UIColor 中获取适当的语法以获得 CIColor 呢?

请查看此帖子:https://dev59.com/9Jzha4cB1Zd3GeqPLNZi - Joe
我看了一下,但不幸的是那篇帖子是从CIColor转换到UIColor,而我正相反:从UIColor转换到CIColor。 - Jake Chasan
2
你的代码在我的Xcode 8.2.1和Swift 3.0.2上运行良好。 - Leo Dabus
1
@LeoDabus 不仅对我来说运行良好,而且执行 UIColor(hue: 0.72, saturation: 1.00, brightness: 0.78, alpha: 1).ciColor 实际上是导致错误的原因。 - Bruno Philipe
从ciColor属性文档中,@BrunoPhilipe提到:“如果颜色对象未使用Core Image颜色进行初始化,则此属性会引发异常。” - Leo Dabus
1
尝试使用UIColor(ciColor: CIColor(color: UIColor(hue: 0.72, saturation: 1.00, brightness: 0.78, alpha: 1))).ciColor进行转换。 - Leo Dabus
2个回答

5
根据评论中提供的反馈,我找到了错误的来源:
在方法后面,我调用了UIColor实例上的.ciColor。这会失败,因为UIColor实例没有首先由CIColor创建。
似乎满足以下条件:
- UIColor => CIColor:必须通过CIColor(颜色:UIColor实例)构造函数进行初始化。 - CIColor => UIColor => CIColor:.ciColor属性可用。

3

正如Jake Chasan所建议的那样,CIColor实例必须使用UIColor实例进行初始化。所以这段Swift代码对我很有效:

func colorToRGB(uiColor: UIColor) -> CIColor
{
    return CIColor(color: uiColor)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接