CGColorGetComponents有问题吗?

Mar*_*eIV 18 iphone objective-c uicolor ios

当我CGColorGetComponentsCGColora返回时UIColor,它似乎正常工作,除了白色和黑色.

这是代码......

CGColorRef myColorRef = [[UIColor whiteColor] CGColor];

const CGFloat * colorComponents = CGColorGetComponents(myColorRef);

NSLog(@"r=%f, g=%f, b=%f, a=%f",
    colorComponents[0],
    colorComponents[1],
    colorComponents[2],
    colorComponents[3]);
Run Code Online (Sandbox Code Playgroud)

这个日志

r=1.000000, g=1.000000, b=0.000000, a=0.000000
Run Code Online (Sandbox Code Playgroud)

注意B和A都是零,而不是一个.

如果你替换其他颜色,如redColor,blueColor等,它可以工作...... RGB和A值设置为人们所期望的.但同样,黑色和白色产生奇怪的结果.这个功能有问题,还是我应该做一些解决方法/任务?

Mat*_*uch 32

[UIColor whiteColor][UIColor blackColor]用于[UIColor colorWithWhite:alpha:]创建UIColor.这意味着这个CGColorRef只有2个颜色组件,而不是4个颜色组件[UIColor colorWithRed:green:blue:alpha:].

当然你也可以NSLog那些.

if (CGColorGetNumberOfComponents(myColorRef) == 2) {
    const CGFloat *colorComponents = CGColorGetComponents(myColorRef);
    NSLog(@"r=%f, g=%f, b=%f, a=%f", colorComponents[0], colorComponents[0], colorComponents[0], colorComponents[1]);
}
else if (CGColorGetNumberOfComponents(myColorRef) == 4) {
    const CGFloat * colorComponents = CGColorGetComponents(myColorRef);
    NSLog(@"r=%f, g=%f, b=%f, a=%f", colorComponents[0], colorComponents[1], colorComponents[2], colorComponents[3]);
}
else {
    NSLog(@"What is this?");
}
Run Code Online (Sandbox Code Playgroud)

请注意,也有不同的colorSpaces.因此,如果您需要此代码而不是记录(例如将RGBA字符串保存到json),您还必须检查(并可能转换)colorSpace.

  • 对于CGContextRef?只需使用`CGContextSetStrokeColorWithColor(context,[UIColor whiteColor] .CGColor);` (2认同)