将Uicolor(扩展范围SRGB)转换为Cicolor



当我在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;需要先转换Colorspace。'

根据文档:

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

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

现在,CIColor位于设备RGB Colorspace中,并且UIColor在扩展的SRGB Colorspace中,从此UIColor获取CIColor的合适语法是什么?

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

稍后,在方法中,我在uicolor实例上调用了.cicolor。这会失败,因为uicolor实例不是由Cicolor创建的。

看起来以下条件如下:

  • uicolor => cicolor:必须由cicolor(颜色:uicolor实例)构造函数初始化
  • cicolor => uicolor => cicolor:.cicicolor属性可用。

正如杰克·查桑(Jake Chasan)所建议的,必须使用uicolor实例初始化Cicolor实例。因此,此快速代码对我有用:

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

最新更新