一尘不染

如何将UIExtendedSRGBColorSpace匹配到我的颜色值

swift

UIButton使用XCode可视编辑器设置颜色。我使用RGB滑块进行设置。在此处输入图片说明

然后我设置变量green

let green = UIColor(red: 0, green: 210/255, blue: 0, alpha: 1)

当我打印出green值并UIButton.backgroundColor得到相应的下一个值时:

UIExtendedSRGBColorSpace -0.146119 0.836984 -0.0130851 1
UIExtendedSRGBColorSpace 0 0.823529 0 1

因此,我猜想,颜色空间相等,但值却不相等。为什么会这样呢?苹果的UIButton()会进行一些隐藏的转换吗?什么目的?此按钮属性和green属性是否可以具有相同的值。


阅读 756

收藏
2020-07-07

共1个答案

一尘不染

在“ RGB滑块”弹出菜单旁边,有一个按钮,可让您选择颜色空间:

在此处输入图片说明

在您的情况下,将其设置为“显示P3”,该颜色空间比sRGB颜色空间“更大”,并允许在具有P3显示器的较新设备上显示更多颜色。此颜色在“扩展的sRGB颜色空间”中表示,其中的组件不限于0.0到1.0的范围(
有关更多信息,请参见UIColor中的
“颜色和颜色空间” )。就你而言

UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

具有负的红色和蓝色成分,即sRGB色域之外的颜色。

如果将颜色选择器中的颜色空间设置为“ sRGB”,则0/210/0的结果将为

UIExtendedSRGBColorSpace 0 0.823529 0 1

并且与

let green = UIColor(red: 0, green: 210/255, blue: 0, alpha: 1)

另外,也可以将Display P3颜色空间也用于以编程方式创建的颜色:

print(label.backgroundColor!)
// UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

let green = UIColor(displayP3Red: 0, green: 210/255, blue: 0, alpha: 1)
print(green)
// UIDisplayP3ColorSpace 0 0.823529 0 1
print(UIColor(cgColor: green.cgColor))
// UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1

print(label.backgroundColor! == green)
// true
2020-07-07