在初始化UIColor类中的实例时,我找不到描述RGB值应使用哪个颜色空间的文章或文档。
文章Getting the right colors in your ios app说我们应该使用Generic RGB。另一方面,我发现有几篇帖子说我们绝对应该在iOS上使用sRGB。
默认颜色空间似乎是CGColorSpace Reference
中写的sRGB在iPad Pro和iPhone 7中使用a new color space称为“显示P3”。现有图像资源中的配置文件必须转换为显示P3。对于Digital Color Meter应用程序,必须选择P3配置文件才能获得“显示P3”RGB值。查看截图。
答案 0 :(得分:6)
iOS使用Extended sRGB作为默认值。
这可以通过Xcode中的调试器轻松验证:
po UIColor.red
,UIExtendedSRGBColorSpace 1 0 0 1
,Xcode 9.2。此颜色空间可以使用相同的sRGB值而不会更改颜色,但同时允许RGB值为负值以及大于1.0以表示sRGB颜色空间外的颜色(即扩展的sRGB颜色空间)。
从2016年开始,有一个很好的WWDC视频Working with Wide Color可以很好地解释这种现象(转到8:35)。
因此,如果您在应用中使用sRGB颜色,那么即使是e-sRGB显示也应该很好。当然,如果您需要sRGB色域之外的特定颜色之一,则需要使用e-sRGB色彩空间。
答案 1 :(得分:6)
我写了一篇博文,详细解释了这一点:
基本上,虽然Sketch使用自定义颜色选择器,它采用sRGB颜色组件,但Xcode的颜色选择不会。
UIColor最常见的工厂方法+ colorWithRed:绿色:蓝色:alpha:假定sRGB色彩空间(如果与iOS 10.x链接,则为扩展sRGB),但它还有另一个工厂方法,colorWithDisplayP3Red:green:blue:alpha:它将接收您的Display P3色彩空间RGBA组件,但在内部将它们存储为翻译值,并引用sRGB色彩空间。
与往常一样,请查看Apple有关UIColor的文档以获取更多信息:
https://developer.apple.com/documentation/uikit/uicolor?changes=latest_minor
有趣的是,AppKit的UIColor对应产品NSColor通过更多可用的工厂方法(包括专门用于模仿UIColor + colorWithRed:green:blue:alpha:behavior的自定义色彩空间设计)支持更灵活的方式。我不确定UIColor为何更受限制。