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

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

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

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

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

«Как введите описание изображения здесь


person Vladimír Slavík    schedule 14.05.2015    source источник
comment
Итак, мы не можем просто взять цвет из палитры цветов Sketch, разделить его на 255 и перейти к UIColor(red:, green:, blue:, alpha:), я прав? Единственное решение, которое я вижу, - использовать цифровую палитру цветов с дисплеем в sRGB.   -  person Oleksii Nezhyborets    schedule 29.12.2016
comment
Цвета не определяются с использованием только значений RGB; вам нужно будет указать цветовое пространство, в котором были определены значения RGB.   -  person Yohst    schedule 19.06.2017


Ответы (2)


TL;DR

iOS по умолчанию использует расширенный 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.

person Yohst    schedule 19.06.2017
comment
Объяснение того, что e-sRGB допускает значения вне диапазона 0,0–1,0, но совместим с sRGB, было для меня ключевым моментом. ???? Жаль, что Apple удалила видео WWDC. - person Doug; 06.07.2021

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

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

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

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

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

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

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

person vsanthanam510    schedule 08.07.2017
comment
Рад, что смог помочь! - person vsanthanam510; 06.02.2018