ios - 从 UIExtendedSRGBColorSpace 转换为十六进制
问题描述
我正在使用一个以 UIExtendedSRGBColorSpace 格式输出颜色的框架。我需要向用户和只接受六字符十六进制代码的后端应用程序显示此输出颜色的六字符十六进制值。我尝试了许多转换方法,但它们似乎都导致奇怪的十六进制值。例如,获取输出UIExtendedSRGBColorSpace 0.276088 -0.0525 1.05 1
并使用这样的扩展(我之前已经成功使用过很多次)会导致46FFFFFFFFFFFFFFF310C
. 简单地将 UIExtendedSRGBColorSpace 输出作为按钮/视图上的背景颜色应用没有问题,但它获取颜色的十六进制值是问题所在。
如果对此的任何解决方案会导致某种形式的色彩准确性损失,那将是很好的,只要我能够获得一个模糊相似的十六进制代码。我对编程很陌生,花了很长时间试图理解这一点,但没有运气,所以感谢任何帮助!
解决方案
您可以将 eRGB 转换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
推荐阅读
- javascript - javascript/html:使复选框检查时需要输入字段
- sql-server - 避免用户编辑 SQL Server 数据库中的表/列
- c# - 超出范围但在范围内?
- android - Android Nearby 无法在 Android Things 上运行
- lua - Cisco AnyConnect 的 Lua 脚本
- tortoisehg - Kdiff3 - TortoiseHg 中的工具启动失败
- javascript - 在移动设备上隐藏 Facebook Messenger 客户聊天
- c# - NuGet 添加引用错误---无法安装包
- r - 如何更改 pickerInput() 的背景颜色以及选择的选项
- excel - 如果带有逗号输出的公式