Iphone CGColorGetComponents()返回什么?

Iphone CGColorGetComponents()返回什么?,iphone,cocoa-touch,core-graphics,uicolor,cgcolor,Iphone,Cocoa Touch,Core Graphics,Uicolor,Cgcolor,这是返回一个浮点还是一个浮点数组?看起来星号是创建数组的缩写。对吗 当我对HSB UIColor对象的CGColor属性调用此函数时,它是否将值转换为RGB?来自: 它返回与石英颜色关联的颜色分量(包括alpha)的值。与关联的颜色组件(包括alpha)的强度值数组 指定的颜色。数组的大小比颜色的颜色空间的组件数多一个。是的,它返回一个CGFloats数组。具体来说,它返回“与指定颜色关联的颜色组件(包括alpha)的强度值数组。” 返回的颜色分量取决于传递的CGColorRef使用的颜色空间

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

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

来自:

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

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

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

有关更多信息,请参阅

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

有点

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

声明变量不会创建数组。事实上,
CGColorGetComponents
。创建CGColor对象的任何对象都会创建数组并将其存储在对象中
CGColorGetComponents
允许您拥有指向该存储的指针

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


如果仍不清楚,请参阅。

获取我使用的RGB组件:

CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);

下面是一个示例,说明如何将CGColorRef
myColorRef
正确转换为NSColor
myNSColor

// 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);

@谢谢。这是否意味着它总是RGBA?我在api的任何地方都没有看到HSBA颜色空间。例如,CGColor并不总是可以在CMYK或白色颜色空间中创建。然而,根据苹果的颜色编程文档(),HSBA颜色空间被指定为RGBA颜色空间。所以,是的,在这种情况下,它将返回RGBA组件,因为颜色是用HSBA组件创建的。@htw谢谢!我一直在看文件。这绝对是我需要找到的。非常有帮助!存储的生存期是多少(内存中的四个浮动)?谁拥有它?它什么时候被回收?@NicolasMiari:要么颜色对象拥有它让你查看的数组,在这种情况下,它的持续时间不会超过颜色对象,要么颜色对象创建并自动释放该数组的副本,在这种情况下,它的持续时间与当前自动释放池的持续时间一样长。
// 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);
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];