Как сопоставить UIExtendedSRGBColorSpace с моими значениями цвета
Я установил цвет для UIButton
с визуальным редактором XCode. Я установил его с помощью ползунков RGB.
Затем я устанавливаю переменную green
:
let green = UIColor(red: 0, green: 210/255, blue: 0, alpha: 1)
Когда я распечатал green
значение и UIButton.backgroundColor
Я получил следующие значения соответственно:
UIExtendedSRGBColorSpace -0.146119 0.836984 -0.0130851 1
UIExtendedSRGBColorSpace 0 0.823529 0 1
Итак, как я полагаю, цветовые пространства равны, а значения - нет. Почему это так? UIButton Apple () делает некоторые скрытые преобразования? Какова цель? Можно ли иметь одинаковые значения для этого свойства кнопки и для green
имущество.
1 ответ
Рядом с всплывающим меню "RGB Sliders" есть кнопка, позволяющая выбрать цветовое пространство:
В вашем случае он установлен на "Дисплей P3", цветовое пространство которого "больше", чем цветовое пространство sRGB, и позволяет отображать больше цветов на новых устройствах с дисплеем P3. Этот цвет представлен в "расширенном цветовом пространстве sRGB", где компоненты не ограничены диапазоном от 0,0 до 1,0 (см. "Цвет и цветовое пространство" в UIColor для получения дополнительной информации). В твоем случае
UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1
с отрицательными красными и синими компонентами, то есть цветовой гаммой sRGB.
Если вы установите цветовое пространство в окне выбора цвета на "sRGB", то результат для 0/210/0 будет
UIExtendedSRGBColorSpace 0 0.823529 0 1
и идентично
let green = UIColor(red: 0, green: 210/255, blue: 0, alpha: 1)
В качестве альтернативы, используйте цветовое пространство Display P3 для программно созданного цвета:
print(label.backgroundColor!)
// UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1
let green = UIColor(displayP3Red: 0, green: 210/255, blue: 0, alpha: 1)
print(green)
// UIDisplayP3ColorSpace 0 0.823529 0 1
print(UIColor(cgColor: green.cgColor))
// UIExtendedSRGBColorSpace -0.416964 0.838774 -0.249501 1
print(label.backgroundColor! == green)
// true