Каково цветовое пространство по умолчанию для UIColor?

Я не могу найти статью или документ, описывающий, какое цветовое пространство должно использоваться для значений RGB при инициализации экземпляра из класса UIColor.

В статье Получение правильных цветов в приложении ios говорит, что мы должны использовать Generic RGB. С другой стороны, я нашел несколько сообщений, в которых говорится, что мы обязательно должны использовать sRGB на iOS.

Кажется, что цветное пространство по умолчанию - sRGB, как написано здесь, в CGColorSpace Reference

Существует новое цветовое пространство под названием "Display P3", используемое в iPad Pro и iPhone 7. Профиль в существующих ресурсах изображений должен быть преобразован в Display P3. Для приложения Digital Color Meter необходимо выбрать профиль P3, чтобы получить значения RGB "Display P3". Смотрите скриншот.

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

Ответы

Ответ 1

TL; DR

iOS использует Extended sRGB по умолчанию.

Детальное объяснение

Это можно легко проверить с помощью отладчика в Xcode:

  • поставить точку останова в любом месте вашего кода,
  • Когда появится lldb, введите po UIColor.red,
  • приведенная выше команда вернет UIExtendedSRGBColorSpace 1 0 0 1 с iOS 11, Xcode 9.2.

Это цветовое пространство может использовать одни и те же значения sRGB без изменения цвета, но в то же время позволяет значениям RGB идти отрицательно, а также больше 1,0, чтобы выразить цвета вне цветового пространства sRGB (т.е. Расширенное цветовое пространство sRGB).

Есть хорошее видео WWDC, работающее с широким цветом, с 2016 года, которое прекрасно объясняет это явление (см. 8:35).

Поэтому, если вы используете цвета sRGB в своем приложении, вам должно быть хорошо идти даже на дисплеи e-sRGB. Конечно, если вам нужен один из тех конкретных цветов вне диапазона sRGB, вам нужно будет использовать цветовое пространство e-sRGB.

Ответ 2

Я написал сообщение в блоге, которое подробно объясняет это:

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

По сути, в то время как Sketch использует пользовательский набор цветов, который предполагает цветовые компоненты sRGB, выбор цвета Xcode не делает.

UIColor наиболее распространенный метод factory + colorWithRed: зеленый: синий: alpha: предполагает sRGB цветовое пространство (Extended sRGB, если оно связано с iOS 10.x), но оно также имеет другой метод factory, colorWithDisplayP3Red: зеленый: blue: alpha: который будет использоваться в ваших RGBA-компонентах Display P3, но сохраняет их внутренне как переведенные значения со ссылкой на цветовое пространство sRGB.

Как обычно, ознакомьтесь с документацией Apple по UIColor для получения дополнительной информации:

https://developer.apple.com/documentation/uikit/uicolor?changes=latest_minor

Интересно, что партнер AppKit UIColor NSColor поддерживает большую гибкость с помощью более доступных factory методов (в том числе один, спроектированный с пользовательским цветовым пространством, специально для имитации UIColor + colorWithRed: green: blue: alpha: behavior). Я не уверен, почему UIColor более ограничен.