web-dev-qa-db-ja.com

UIExtendedSRGBColorSpaceを私の色の値に一致させる方法

XCodeビジュアルエディタでUIButtonの色を設定しました。 RGBスライダーを使って設定しました。 enter image description here

次に、変数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

したがって、私が推測するように、色空間は同じですが、値は同じではありません。なぜそうなのですか? AppleのUIButton()はいくつかの隠された変換を行いますか?目的は何ですか?このボタンプロパティとgreenプロパティに同じ値を設定することは可能ですか。

7

「RGBスライダー」ポップアップメニューの横には、色空間を選択できるボタンがあります。

enter image description here

あなたの場合、それは「Display P3」に設定されています。これは、sRGB色空間よりも「大きい」色空間であり、P3ディスプレイを備えた新しいデバイスでより多くの色を表示できます。この色は、コンポーネントが0.0から1.0の範囲に制限されていない「拡張sRGB色空間」で表されます(詳細については、 IColor の「色と色空間」を参照してください)。あなたの場合

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)

または、プログラムで作成された色にもDisplayP3色空間を使用します。

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
9
Martin R