Как сопоставить 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
Другие вопросы по тегам