当前位置: 首页 > 面试题库 >

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

上官扬
2023-03-14
问题内容

有人遇到过这个问题吗?这看起来像是苹果代码中的错误,如果人们同意该代码应按我认为的方式工作,我将提交雷达报告。我对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)")
    }
}

问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 我正在处理图像,并想确定一组像素是否更接近白色或黑色。 因此,给定一组 颜色/像素 ,如何确定它们接近白色还是黑色? 我尝试了一些笨拙的算法,有人知道我该怎么做吗? 问题答案: 我要说的是,您可以先将颜色转换为灰度,然后检查它是否更接近黑色或白色。 首先将RGB颜色值转换为通过以下公式计算亮度 然后检查该值是接近于0还是255,并相应地选择黑色或白色 请注意,如果未对颜色空间进行伽玛压

  • 我以前也发布过同样的问题,但我现在再次发布,因为我在代码中发现了更多的错误并更正了它们。然而,我仍然面临着和以前一样的问题! 原始帖子:我几周前刚开始学习Python,我正在学习一个教程,用pygame构建一个数独解算器! 我现在面临的问题是,每当我尝试运行代码时,只会弹出一个黑色的空白窗口。我已经一遍又一遍地检查我的代码,但我似乎找不到问题。。。我不确定我的代码中到底是哪里出了问题,所以请原谅我

  • 我已经为Android制作了一个TicTacToe游戏,为了开始一个新游戏,我调用让用户在新的Act 但问题来了:整个SurfaceView只是一个黑色区域,直到我点击某个地方,然后它就会像它应该的那样运行:方法被调用,游戏变得可见。 我有什么办法摆脱黑屏吗?我已经尝试在onResume()/onPause期间将LinearLayout和SurfaceView设置为可见/不可见。而或也不起作用。

  • 我想为从0到无穷大随机的不同数字显示不同的颜色。我已经找到了灰色(从黑色到白色)的颜色。我想用某种方式给它上色。 所以,我对格雷的公式很简单: 数字越大,颜色越接近白色。 下面是一个在这种情况下有效的公式:N是一个数字<代码>颜色3=color2=color1=Math。地面(255/(1N)) //总是在0到255之间,对吗? N越大,接近255。而且很有效。 然后我使用rgb(col1, co

  • 我有一个运行良好的Android应用程序,但我发现了一个恼人的bug,我不知道还能做些什么来解决它。 我的应用程序只有一个活动(称之为HomeActivity;加上Preferences活动)和许多片段。HomeActivity使用此方法管理每个片段的替换(可在此线程中找到,尤其是查看以下注释): 要替换一个片段,我要做的是以下操作: 问题就在这里:我浏览了几个Fragments(比如说,其中的3

  • 我在给散点图标记着色时遇到了一些麻烦。我有一个简单的数据框,其中有一个值“pos”和另外两个值“af_min”和“af_max”。我想根据af_x和af_y的一些条件给标记上色,但是因为我没有任何列可以用作色调,所以我创建了自己的列“color”。 现在,我创建了一个散点图,使用海运和海运调色板的方式: 在这里,我放置了整个脚本,以便您可以复制它: 感谢所有能帮忙的人!