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

时间:2017-02-17 00:08:31

标签: swift colors swift3 ios10 uicolor

当我在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未定义为UIColor UIExtendedGrayColorSpace 1 1;需要先转换颜色空间。'

根据文件:

  

颜色对象。由该对象表示的颜色信息在RGB颜色空间中。在针对iOS 10或更高版本链接的应用程序中,颜色在扩展范围的sRGB颜色空间中指定。在早期版本的iOS上,颜色在设备RGB颜色空间中指定。

来源:https://developer.apple.com/reference/uikit/uicolor/1621931-init

现在CIColor位于设备RGB颜色空间且UIColor位于扩展sRGB颜色空间中,从CIColor获取UIColor的适当语法是什么? ?

2 个答案:

答案 0 :(得分:3)

根据评论中提供的反馈,我找到了错误的来源:

稍后在方法中,我在UIColor的一个实例上调用了.ciColor。这会失败,因为UIColor实例最初不是由CIColor创建的。

似乎满足以下条件:

  • UIColor => CIColor:必须由CIColor(color:UIColor实例)构造函数
  • 初始化
  • CIColor => UIColor => CIColor:.ciColor属性可用。

答案 1 :(得分:2)

正如Jake Chasan所建议的那样,必须使用UIColor实例初始化CIColor实例。所以这个快速的代码对我有用:

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