CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
这会返回浮点数还是浮点数组?看起来星号是创建数组的简写。这是对的吗?
当我在HSB UIColor对象的CGColor属性上调用此函数时,它是否将值转换为RGB?
答案 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];