从 UIExtendedSRGBColorSpace 转换为 Hex
Converting from UIExtendedSRGBColorSpace to Hex
我正在使用一个以 UIExtendedSRGBColorSpace 格式输出颜色的框架。我需要向用户显示此输出颜色的六字符十六进制值,以及仅接受六字符十六进制代码的后端应用程序。我尝试过多种转换方法,但它们似乎都会产生奇怪的十六进制值。例如,获取输出 UIExtendedSRGBColorSpace 0.276088 -0.0525 1.05 1
并使用像 this 这样的扩展(我之前已经成功使用过很多次)会导致 46FFFFFFFFFFFFFFF310C
。简单地将 UIExtendedSRGBColorSpace 输出应用为 button/view 上的背景颜色没有问题,但问题是它获取颜色的十六进制值。
如果对此有任何解决方案会导致某种形式的颜色准确性损失,那也没关系,只要我能够获得大致相似的十六进制代码即可。我是编程的新手,花了很多时间试图理解这一点,但运气不佳,非常感谢您的帮助!
您可以将 UIColor
转换为 CGColor
并从 eRGB 转换为 sRGB。请注意,一旦将其转换为标准 RGB,就无法再转换回扩展 RGB:
extension CGColorSpace {
static let sRGB = CGColorSpace(name: CGColorSpace.sRGB)!
static let extendedSRGB = CGColorSpace(name: CGColorSpace.extendedSRGB)!
}
extension CGColor {
var color: UIColor { .init(cgColor: self) }
}
extension UIColor {
var extendedSRGB2sRGB: UIColor? {
guard let components = cgColor.components else { return nil }
return CGColor(colorSpace: .extendedSRGB, components: components)?
.converted(to: .sRGB, intent: .relativeColorimetric, options: nil)?.color
}
}
游乐场测试:
let extendedSRGB = UIColor(red: 0.276088, green: -0.0525, blue: 1.05, alpha: 1)
let sRGB = extendedSRGB.extendedSRGB2sRGB // r 0.276 g 0.0 b 1.0 a 1.0
我正在使用一个以 UIExtendedSRGBColorSpace 格式输出颜色的框架。我需要向用户显示此输出颜色的六字符十六进制值,以及仅接受六字符十六进制代码的后端应用程序。我尝试过多种转换方法,但它们似乎都会产生奇怪的十六进制值。例如,获取输出 UIExtendedSRGBColorSpace 0.276088 -0.0525 1.05 1
并使用像 this 这样的扩展(我之前已经成功使用过很多次)会导致 46FFFFFFFFFFFFFFF310C
。简单地将 UIExtendedSRGBColorSpace 输出应用为 button/view 上的背景颜色没有问题,但问题是它获取颜色的十六进制值。
如果对此有任何解决方案会导致某种形式的颜色准确性损失,那也没关系,只要我能够获得大致相似的十六进制代码即可。我是编程的新手,花了很多时间试图理解这一点,但运气不佳,非常感谢您的帮助!
您可以将 UIColor
转换为 CGColor
并从 eRGB 转换为 sRGB。请注意,一旦将其转换为标准 RGB,就无法再转换回扩展 RGB:
extension CGColorSpace {
static let sRGB = CGColorSpace(name: CGColorSpace.sRGB)!
static let extendedSRGB = CGColorSpace(name: CGColorSpace.extendedSRGB)!
}
extension CGColor {
var color: UIColor { .init(cgColor: self) }
}
extension UIColor {
var extendedSRGB2sRGB: UIColor? {
guard let components = cgColor.components else { return nil }
return CGColor(colorSpace: .extendedSRGB, components: components)?
.converted(to: .sRGB, intent: .relativeColorimetric, options: nil)?.color
}
}
游乐场测试:
let extendedSRGB = UIColor(red: 0.276088, green: -0.0525, blue: 1.05, alpha: 1)
let sRGB = extendedSRGB.extendedSRGB2sRGB // r 0.276 g 0.0 b 1.0 a 1.0