小编典典

CGColorGetComponents()不能为黑色和白色返回正确的值

swift

有人遇到过这个问题吗?这看起来像是苹果代码中的错误,如果人们同意该代码应按我认为的方式工作,我将提交雷达报告。我对CoreGraphics颜色管理不是很熟悉,因此我在问苹果问题报告之前询问我。

这是直接来自模板项目的,唯一的非模板代码是您在下面看到的内容。请注意,红色,绿色和蓝色均显示正确的组件值,但不显示白色或黑色。

如果先更改顺序,例如黑色和白色,然后更改红色,绿色和蓝色,则问题仍然存在。

这是Swift 1.2和Xcode 6.3.1(6D1002)。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        let colorComps = [
            CGColorGetComponents(UIColor.redColor().CGColor),
            CGColorGetComponents(UIColor.greenColor().CGColor),
            CGColorGetComponents(UIColor.blueColor().CGColor),
            CGColorGetComponents(UIColor.blackColor().CGColor),
            CGColorGetComponents(UIColor.whiteColor().CGColor)
        ]

        var components = [CGFloat]()
        for cc in colorComps
        {
            for i in 0...3 { components.append(cc[i]) }
        }

        println("components: \(components)")
    }
}

阅读 429

收藏
2020-07-07

共1个答案

小编典典

什么你不抓是关于CGColorGetComponents,没有什么做任何声明或担保, 有多少 成分有或 什么 他们的意思。
信息包含在颜色的颜色空间中。如果查看白色和黑色的色彩空间,您会发现它们都是灰色形式:

let sp = CGColorGetColorSpace(UIColor.whiteColor().CGColor)
println(sp) // kCGColorSpaceDeviceGrey

因此,它们仅用 两个 值表示:灰度值和alpha。

因此,白色是[1.0,1.0]-如果您忽略了多余的两个数字,那么这些数字本来就是您想要的,而这两个数字本来就不应该您首先阅读的。

同样,black是[0.0,1.0],这也是您所得到的。

2020-07-07