2017-05-05 7 views
4

일반 RGB 색상 공간의 색상을 포함하는 문자열을 Swift의 UIColor로 변환하려고합니다. 예를 들어, 일반적인 문자열은 다음과 같습니다스위프트의 일반 RGB 초기화

맥 OS에서 색상 선택기를 사용
0.121569 0.129412 0.156863 1 

, 나는이 값은 일반 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 값을 변환 얼마나 어떤 생각?

편집는 설명을 위해, 나는 색 공간의 방법으로 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) 

편집 나는 원래 문제의 전제는 잘못된 생각합니다. Xcode FontAndColorThemes 파일에서 숫자를 사용하려고합니다. 그 수는 일반 RGB가 아닌 sRGB입니다. 색상은 기본 색 테마의 의견 색상에서 가져

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