Question

CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);

Est-ce que le retour d'un flotteur, ou un tableau de chars? On dirait que l'astérisque est un raccourci pour la création d'un tableau. Est-ce exact?

Quand j'appelle cette fonction sur la propriété d'un objet CGColor HSB UIColor-t-il convertir les valeurs en RVB?

Était-ce utile?

La solution

Oui, elle retourne un tableau de CGFloats. Plus précisément, elle retourne « un tableau de valeurs d'intensité pour les composantes de couleur (y compris alpha) associé à la couleur spécifiée. »

Les composantes de couleur retournées dépendent de ce que l'espace couleur du CGColorRef passé utilise.

Plus d'informations peuvent être trouvées dans la section documentation CGColor .

Autres conseils

CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
     

Est-ce que le retour d'un flotteur, ou un tableau de chars? On dirait que l'astérisque est un raccourci pour la création d'un tableau. Est-ce exact?

En quelque sorte.

CGFloat *colors déclare une variable contenant un pointeur vers au moins un CGFloat. CGColorGetComponents renvoie un pointeur sur plusieurs CGFloats, l'un après l'autre, un groupement de C. Vous prenez ce pointeur et l'affecter à (mettez le pointeur dans) la variable colors.

Déclaration de la variable ne pas créer le tableau. En fait, ni ne CGColorGetComponents. Quel que soit créé l'objet CGColor a créé le tableau et stocké à l'intérieur de l'objet; CGColorGetComponents vous permet d'avoir le pointeur sur ce stockage.

Déclaration de la variable CGFloat *colors crée seulement un lieu-la variable pour stocker un pointeur vers un ou plusieurs CGFloats. La chose dans la variable est le pointeur, et la chose à ce pointeur est le tableau.

Si cela est encore peu claire, voir Tout ce que vous devez savoir sur les pointeurs en C .

De d'Apple :

Il renvoie les valeurs des composantes de couleur (y compris alpha) associées à une couleur de quartz. Un tableau de valeurs d'intensité pour les composantes de couleur (y compris alpha) associés à la couleur spécifiée. La taille de la matrice est un de plus que le nombre de composants de l'espace de couleur pour la couleur.

Pour obtenir des composants RGB j'utiliser:

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

Voici un exemple de la façon dont vous pouvez convertir correctement un myColorRef CGColorRef à un myNSColor NSColor:

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];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top