模拟UIColor颜色转换到iPhone屏幕

时间:2017-08-22 07:57:08

标签: ios core-graphics

当我有一个具有特定背景颜色的标准UIView元素时,假设RGB = 41,42,46,如果它在屏幕上显示,它会在iOS 10上自动转换为另一种颜色 - 这里RGB = 53 ,56,60。我对苹果自动颜色转换没有任何问题。 但是,当我使用相同的颜色绘制OpenGL,它更接近裸机时,Apple什么都不做,41,42,46正好保持41,42,46。由于我不想对抗苹果自动颜色转换并假设它会变得非常麻烦,我只是想模拟/计算苹果颜色转换以给OpenGL苹果转换颜色。

我用CGColorSpace,cgColor.converted等尝试过,但到目前为止我没有运气。这是游乐场:

import UIKit

//let colorSpaceName = CGColorSpace.displayP3
//let colorSpaceName = CGColorSpace.sRGB
let colorSpaceName = CGColorSpace.extendedSRGB
//let colorSpaceName = CGColorSpace.extendedLinearSRGB

let targetColorSpace = CGColorSpace.init(name: colorSpaceName)!

let color = UIColor.init(red: 10/255, green: 20/255, blue: 30/255, alpha: 1)
let cgColor = color.cgColor
let cgColorModel = cgColor.colorSpace
print("Original space: \(String(describing: cgColorModel))")

let convertedCgColor = cgColor.converted(to: targetColorSpace,
                                     intent: CGColorRenderingIntent.perceptual,
                                     options: nil)!
let comps = convertedCgColor.components!
print("Converted: \(convertedCgColor),\n"
    + "\(comps[0] * 255), \(comps[1] * 255), \(comps[2] * 255), \(comps[3] * 255)")

我真的想避免截取我的UIView或图片的截图,只是为了获得转换后的颜色。必须有一个不那么笨拙的解决方案。

0 个答案:

没有答案