Pregunta

CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);

¿Esto devuelve un flotador, o una serie de flotadores? Parece que el asterisco es la abreviatura para la creación de una matriz. ¿Es eso correcto?

Cuando llamo a esta función en la propiedad de un objeto CGColor HSB UIColor qué convertir los valores en RGB?

¿Fue útil?

Solución

Sí, se devuelve una matriz de CGFloats. En concreto, se devuelve "una matriz de valores de intensidad para los componentes de color (incluyendo alfa) asociado con el color especificado."

Los componentes de color devueltos dependen de lo que el espacio de color utiliza el CGColorRef pasado.

Más información se puede encontrar en el CGColor documentación .

Otros consejos

CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
     

¿Esto devuelve un flotador, o una serie de flotadores? Parece que el asterisco es la abreviatura para la creación de una matriz. ¿Es eso correcto?

Una especie de.

CGFloat *colors declara una variable que contiene un puntero al menos una CGFloat. CGColorGetComponents devuelve un puntero a varios CGFloats, uno tras otro, una matriz C. Se toma ese puntero y la asigna a (poner el puntero en) la variable colors.

La declaración de la variable no crear de la matriz. De hecho, tampoco lo hace CGColorGetComponents. Cualquiera que sea creado el objeto CGColor creado la matriz y se almacena en el interior del objeto; CGColorGetComponents le permite tener el puntero para que el almacenamiento.

La declaración de la variable CGFloat *colors crea sólo un lugar-la variable para almacenar un puntero a una o más CGFloats. La hora de la variable es el puntero, y la cosa en ese puntero es la matriz.

Si esto todavía no está claro, ver Todo lo que necesita saber acerca de los punteros en C .

de Apple :

Devuelve los valores de las componentes de color (incluyendo alfa) asociados con un color de cuarzo. Una matriz de valores de intensidad para los componentes de color (incluyendo alfa) asociados con el color especificado. El tamaño de la matriz es uno más que el número de componentes del espacio de color para el color.

Para obtener componentes RGB que utilizo:

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

Este es un ejemplo de cómo se puede convertir correctamente un myColorRef CGColorRef a 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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top