Ios CGColorGetComponents()未返回正确的黑白值

Ios CGColorGetComponents()未返回正确的黑白值,ios,swift,quartz-graphics,Ios,Swift,Quartz Graphics,有没有人遇到过这个问题?这看起来像是苹果代码中的一个bug,如果人们同意这个代码应该做我认为应该做的事情,我将提交一个雷达。我对CoreGraphicscolor management不太熟悉,因此在我用bug报告对苹果进行bug之前,我先问一下 这是一个模板项目,唯一的非模板代码是您在下面看到的。请注意,红色、绿色和蓝色都显示正确的组件值,但不是白色或黑色 如果您先用黑色和白色,然后是红色、绿色和蓝色来更改顺序,则问题仍然存在 这是Swift 1.2和Xcode 6.3.1(6D1002) 您

有没有人遇到过这个问题?这看起来像是苹果代码中的一个bug,如果人们同意这个代码应该做我认为应该做的事情,我将提交一个雷达。我对
CoreGraphics
color management不太熟悉,因此在我用bug报告对苹果进行bug之前,我先问一下

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

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

这是Swift 1.2和Xcode 6.3.1(6D1002)


您没有理解的是,关于CGColorGetComponents的任何内容都不会对有多少组件或它们的含义做出任何声明或保证。该信息包含在颜色的颜色空间中。如果你看白色和黑色的颜色空间,你会发现它们都是灰色:

let sp = CGColorGetColorSpace(UIColor.whiteColor().CGColor)
println(sp) // kCGColorSpaceDeviceGrey
因此,它们仅用两个值表示:灰度值和α值

因此,白色是
[1.0,1.0]
——如果您忽略了原本不应该阅读的额外两个数字,那么白色就是您得到的


类似地,黑色是
[0.0,1.0]
,这也是您得到的。

您没有掌握的是,关于CGColorGetComponents,没有任何声明或保证有多少组件或它们的含义。该信息包含在颜色的颜色空间中。如果你看白色和黑色的颜色空间,你会发现它们都是灰色:

let sp = CGColorGetColorSpace(UIColor.whiteColor().CGColor)
println(sp) // kCGColorSpaceDeviceGrey
因此,它们仅用两个值表示:灰度值和α值

因此,白色是
[1.0,1.0]
——如果您忽略了原本不应该阅读的额外两个数字,那么白色就是您得到的


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

真的吗?源代码是图像吗?我看不出截图之间有多大区别。请将所有尝试合并到一个数组中,并显示其日志。这会干净得多。真的吗?源代码是图像吗?我看不出截图之间有多大区别。请将所有尝试合并到一个数组中,并显示其日志。这会干净得多。