8
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);

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

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

4

5 回答 5

5
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);

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

有点。

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

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

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

如果这仍然不清楚,请参阅您需要了解的关于 C 中指针的所有信息

于 2009-04-27T09:55:42.727 回答
4

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

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

更多信息可以在CGColor 文档中找到。

于 2009-04-27T02:58:49.263 回答
1

来自苹果

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

于 2009-04-27T02:57:58.173 回答
1

要获得我使用的 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);
于 2017-02-01T04:09:47.333 回答
0

这是一个如何正确将 CGColorRef 转换为 NSColormyColorRef的示例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];
于 2017-05-11T05:11:25.993 回答