首页 文章

CGColorGetComponents()没有为黑色和白色返回正确的值

提问于
浏览
-1

有没有人遇到过这个问题?它看起来像Apple 's code and I will submit a radar if people agree that this code should do what I think it should do. I'中的一个错误并不是所有熟悉 CoreGraphics 颜色管理的错误,因此我在问我错误之前向Apple提出错误报告 .

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

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

这是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)")
    }
}

1 回答

  • 4

    您没有意识到的是,CGColorGetComponents没有任何关于有多少组件或它们意味着什么的声明或保证 . 该信息包含在颜色的颜色空间中 . 如果你看一下白色和黑色的颜色空间,你会发现它们都是灰色的形式:

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

    因此,它们仅用两个值表示:灰色量和α值 .

    因此,白色是 [1.0,1.0] - 如果你忽略了你不应该首先阅读的额外两个数字,那就是你得到的 .

    同样,黑色也是 [0.0,1.0] ,这也是你得到的 .

相关问题