gpt4 book ai didi

ios - 初始化 UIColor displayP3 颜色时的最佳实践

转载 作者:行者123 更新时间:2023-11-28 09:40:35 27 4
gpt4 key购买 nike

最好用init(displayP3Red:green:blue:alpha:)吗?默认情况下在创建 UIColor 时进行可用性检查?老实说,我看不出两者之间的区别,所以我不确定这有多重要,但我希望有人能对此有所启发。

if #available(iOS 10.0, *) {
self.init(displayP3Red: r, green: g, blue: b, alpha: a)
} else {
self.init(red: r, green: g, blue: b, alpha: a)
}

最佳答案

不,这些调用是不等价的。将相同的 RGBA 值传递给每个值将产生不同的颜色。

Here's a handy article讨论色彩空间的差异。它很好地类比了颜色空间就像尺子上的长度单位。如果我说某个对象的长度为 1.0,那没有任何意义,除非你知道“1.0”有多长。英寸?米?弗隆?秒差距?单位的定义对测量中的数量意味着什么有很大的不同。

同样,如果我说一种颜色的红色分量为 1.0,那没有任何意义,除非我也说有多红 1.0。 (绿色和蓝色组件同上。)在 Web 和应用程序设计的大部分历史中,可以安全地假设所有测量值都与 sRGB 标准相关——1.0 红色意味着“sRGB 所能达到的红色”。

但随着支持更大色域的电话、计算机、电视等的出现,这种假设不再安全。 Display P3 是较新的 Apple 设备使用的色彩空间(与较新的 4K HDR 电视使用的色彩空间非常接近)。 P3 支持比 sRGB 更广泛的颜色范围,这意味着“尽可能红的 sRGB 可以得到”是不够红的。

为了使 sRGB 和 P3 设备之间的互操作更容易一些,Apple 的 API 包括“扩展 sRGB”色彩空间。在常规 sRGB 中,与在大多数颜色空间中一样,分量值被限制在 0.0-1.0 范围内——也就是说,你不能有 1.1 的红色分量,如果你尝试,你只会把它限制在 1.0 .扩展 sRGB 被定义为与 sRGB 相同,用于 0.0–1.0 范围内的分量值,但允许使用该范围之外的值来表示 sRGB 色域之外的颜色。 (这就是 Apple 文档所说的 UIColor(red:green:blue:alpha:) 使用扩展的 sRGB 色彩空间时的意思。)


iOS 中的

UIColor(以及位于其下方的 CGColor)不提供方便的颜色空间转换实用程序,但 macOS 中的 NSColor确实如此,这使得说明差异变得很方便:

Xcode playground screenshot showing sRGB vs P3 red differences

第一个红色相当于iOS中的UIColor(displayP3Red: 1, green: 0, blue: 0, alpha: 1)。第二个相当于 iOS 中的 UIColor(red: 1, green: 0, blue: 0, alpha: 1)。如果您在 P3 显示器*上查看此答案,您可能至少会注意到颜色样本的细微差别。

在下方,请注意转换后的值。 “sRGB 最大红色”,又名 UIColor(red: 1, green: 0, blue: 0, alpha: 1) 大致等同于 (r: 0.918, g: 0.2, b: 0.139, a: 1) 在 P3 中。 “P3 最大红色”,又名 UIColor(displayP3Red: 1, green: 0, blue: 0, alpha: 1) 在 sRGB 之外,但可以在“扩展 sRGB”中表示为 ( r:1.093,g:-0.227,b:-0.15,a:1)

* 配备 P3 显示屏的 Apple 设备包括 iPhone 7、iPad Pro 2016、iMac 2015 秋季款、MacBook Pro 2016 秋季款及更新机型

关于ios - 初始化 UIColor displayP3 颜色时的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49039235/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com