CGColorGetComponents()返回什么?

时间:2009-04-27 02:48:28

标签: iphone cocoa-touch core-graphics uicolor cgcolor

CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);

这会返回浮点数还是浮点数组?看起来星号是创建数组的简写。这是对的吗?

当我在HSB UIColor对象的CGColor属性上调用此函数时,它是否将值转换为RGB?

5 个答案:

答案 0 :(得分:5)

CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
     

这会返回浮点数还是浮点数组?看起来星号是创建数组的简写。这是对的吗?

排序。

CGFloat *colors声明一个变量,其中包含指向至少一个CGFloat的指针。 CGColorGetComponents返回一个指向几个CGFloats的指针,一个接着一个C数组。您接受该指针并将其分配给(将指针放入)colors变量。

声明变量不会创建数组。事实上,CGColorGetComponents也没有。无论创建什么CGColor对象都创建了数组并将其存储在对象中; CGColorGetComponents允许您拥有指向该存储的指针。

声明CGFloat *colors变量只创建一个位置 - 变量 - 用于存储指向一个或多个CGFloats的指针。变量中的东西是指针,指针处的东西是数组。

如果仍然不清楚,请参阅Everything you need to know about pointers in C

答案 1 :(得分:4)

是的,它返回一个CGFloats的数组。具体来说,它返回“与指定颜色相关的颜色成分(包括alpha)的强度值数组。”

返回的颜色分量取决于传递的CGColorRef使用的颜色空间。

更多信息可在CGColor documentation

中找到

答案 2 :(得分:1)

来自Apple

返回与Quartz颜色关联的颜色分量(包括alpha)的值。与...相关的颜色分量(包括alpha)的强度值数组 指定的颜色。数组的大小比颜色的颜色空间的组件数多一个。

答案 3 :(得分:0)

要获取我使用的RGB组件:

// Get UIColor's RGB normalized components (0..1)
CGFloat red, green, blue, alpha;
[color getRed:&red green:&green blue:&blue alpha:&alpha];

// Convert RGB components to 8-bit values (0..255)
int r = (int)(red * 255.0);
int g = (int)(green * 255.0);
int b = (int)(blue * 255.0);

答案 4 :(得分:0)

以下是如何正确将CGColorRef myColorRef转换为NSColor myNSColor的示例:

NSColorSpace *cp = [[NSColorSpace alloc] initWithCGColorSpace:CGColorGetColorSpace(myColorRef)];
const CGFloat *components = CGColorGetComponents(myColorRef);
size_t componentCount = CGColorGetNumberOfComponents(myColorRef);
NSColor* myNSColor = [NSColor colorWithColorSpace:cp components:components count:componentCount];