Каково цветовое пространство по умолчанию для 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". Смотрите скриншот.
![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 более ограничен.