UIColor的默认色彩空间是什么?

时间:2015-05-14 11:49:07

标签: ios rgb uicolor srgb

在初始化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值。查看截图。

How to pick the right RGB values for the Display P3 color space. enter image description here

2 个答案:

答案 0 :(得分:6)

TL; DR

iOS使用Extended sRGB作为默认值。

详细说明

这可以通过Xcode中的调试器轻松验证:

  • 在代码中的任何位置放置一个断点,
  • 当lldb出现时,输入po UIColor.red
  • 从iOS 11开始,上面的命令将返回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)

我写了一篇博文,详细解释了这一点:

http://www.vsanthanam.com/writing/2017/7/6/colors-in-ios-ensuring-consistency-between-designs-interface-builder-and-uicolor

基本上,虽然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为何更受限制。