2017-05-05 7 views
4

ジェネリックRGBカラースペースのカラーを含む文字列をSwiftのUIColorに変換しようとしています。例えば、一般的な文字列は次のようになります。SwiftのジェネリックRGBを開始

0.121569 0.129412 0.156863 1 

のMacOSでのカラーピッカーを使用して、私は、これらの値は、一般的なRGB色空間を使用していることを発見しました。

enter image description here

はしかし、私はUIColorに、これらの値を変換しようとすると、それは、sRGB色空間を使用しています。

let red = CGFloat((components[0] as NSString).doubleValue) 
let green = CGFloat((components[1] as NSString).doubleValue) 
let blue = CGFloat((components[2] as NSString).doubleValue) 
let alpha = CGFloat((components[3] as NSString).doubleValue) 

print(UIColor(red: red, green: green, blue: blue, alpha: alpha)) 
// Log Result: NSCustomColorSpace sRGB IEC61966-2.1 colorspace 0.121569 0.129412 0.156863 1 

したがって、私のアプリケーションには異なる色が表示されます。私はIEC61966-2.1するカラーピッカーで色空間を変更することで、これを確認し、それは確かに異なる値を表示:

enter image description here

私は正しいUIColor値に一般的なRGB値を変換する方法を任意のアイデア?

EDITは明確にするために、私は色空間の方法であることにより、XMLファイルに外部ソースから

+0

正しいUIColor値を意味していますか? NSColorそれはOS Xだけです –

答えて

3

色変換を色を読んでいて、他の方式に文字列の色の値を変更することができませんCGColorのレベルで実行されます。例:私はあなたの元の問題の前提が誤っていると思う

let sp = CGColorSpace(name:CGColorSpace.genericRGBLinear)! 
let comps : [CGFloat] = [0.121569, 0.129412, 0.156863, 1] 
let c = CGColor(colorSpace: sp, components: comps)! 
let sp2 = CGColorSpace(name:CGColorSpace.sRGB)! 
let c2 = c.converted(to: sp2, intent: .relativeColorimetric, options: nil)! 
let color = UIColor(cgColor: c2) 

EDIT。 XcodeのFontAndColorThemesファイルで数値を使用しようとしています。これらの数字はsRGBであり、一般的なRGBではありません。それを証明する

は、私はこのコードを実行しました:

let sp = CGColorSpace(name:CGColorSpace.sRGB)! 
    let comps : [CGFloat] = [0.0, 0.456, 0.0, 1] 
    let c = CGColor(colorSpace: sp, components: comps)! 
    let v1 = UIView(frame:CGRect(x: 50, y: 50, width: 50, height: 50)) 
    v1.backgroundColor = UIColor(cgColor:c) 
    self.view.addSubview(v1) 

色はデフォルトの色のテーマのコメントの色から取られていること。このスクリーンショットが示すようさて、その結果は、コメントの色と同じです。

enter image description here

私は単純に読み取るために色見本を開いたときのように、「スポイト」ツールを使用するとき、私は同じ答えを得ますインスペクタ。また、XcodeのスウォッチとiOSスウォッチで「スポイト」ツールを使用すると、同じ回答が得られます。これは、これらの色が常にsRGBであることを証明するようです。

+1

実際に私は変換の必要はないと思います。あなたはUIColorで 'c'を直接ラップすることができます。 – matt

+1

質問の前提が誤っていることを示すために私の答えを広げました。 – matt

関連する問題