CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
这会返回一个浮点数还是一个浮点数数组?看起来星号是创建数组的简写。那是对的吗?
当我在 HSB UIColor 对象的 CGColor 属性上调用此函数时,它会将值转换为 RGB 吗?
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
这会返回一个浮点数还是一个浮点数数组?看起来星号是创建数组的简写。那是对的吗?
当我在 HSB UIColor 对象的 CGColor 属性上调用此函数时,它会将值转换为 RGB 吗?
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
这会返回一个浮点数还是一个浮点数数组?看起来星号是创建数组的简写。那是对的吗?
有点。
CGFloat *colors
声明一个变量,该变量包含一个指向至少一个 CGFloat 的指针。CGColorGetComponents
返回一个指向多个 CGFloat 的指针,一个接一个 - 一个 C 数组。您获取该指针并将其分配给(将指针放入)colors
变量。
声明变量不会创建数组。事实上,两者都没有CGColorGetComponents
。无论创建了 CGColor 对象,都创建了数组并将其存储在对象中;CGColorGetComponents
让您拥有指向该存储的指针。
声明CGFloat *colors
变量只会创建一个位置——变量——来存储指向一个或多个 CGFloats 的指针。变量中的东西是指针,指针处的东西是数组。
如果这仍然不清楚,请参阅您需要了解的关于 C 中指针的所有信息。
是的,它返回一个数组CGFloats
。具体来说,它返回“与指定颜色相关的颜色分量(包括 alpha)的强度值数组”。
返回的颜色分量取决于传递CGColorRef
使用的颜色空间。
更多信息可以在CGColor 文档中找到。
来自苹果:
它返回与 Quartz 颜色相关的颜色分量(包括 alpha)的值。与指定颜色关联的颜色分量(包括 alpha)的强度值数组。数组的大小比颜色的颜色空间的分量数大一。
要获得我使用的 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);
这是一个如何正确将 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];