online hexadecimal from custom iphone core-graphics uicolor cgcolor

iphone - hexadecimal - uicolor online



Extrayendo rgb de UIColor (8)

Esta pregunta ya tiene una respuesta aquí:

Visto esto preguntado antes, pero mi ejemplo no parece funcionar.

const CGFloat *toCol = CGColorGetComponents([[UIColor greenColor] CGColor]);

La matriz está vacía al mirarla con GDB. ¿Algún consejo?



Aquí hay una solución completa que también tiene en cuenta los colores que no son RGB, por ejemplo [UIColor blackColor]

UIColor *color = [UIColor blackColor]; CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0; // iOS 5 if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) { [color getRed:&red green:&green blue:&blue alpha:&alpha]; } else { // < iOS 5 const CGFloat *components = CGColorGetComponents(color.CGColor); red = components[0]; green = components[1]; blue = components[2]; alpha = components[3]; } // This is a non-RGB color if(CGColorGetNumberOfComponents(color.CGColor) == 2) { CGFloat hue; CGFloat saturation; CGFloat brightness; [color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]; }


Checkout uicolor-utilities . Parece una muy buena biblioteca para hacer esto y muchas otras cosas útiles con UIColor. Por ejemplo, con esta biblioteca puedes escribir:

CGFloat red = [myColor red];


El ejemplo de código que proporcionó debería funcionar.

Prueba esto:

UIColor uicolor = [[UIColor greenColor] retain]; CGColorRef color = [uicolor CGColor]; int numComponents = CGColorGetNumberOfComponents(color); if (numComponents == 4) { const CGFloat *components = CGColorGetComponents(color); CGFloat red = components[0]; CGFloat green = components[1]; CGFloat blue = components[2]; CGFloat alpha = components[3]; } [uicolor release];


En iOS 5 puedes usar:

UIColor *color = [UIColor orangeColor]; CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0; if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) { [color getRed:&red green:&green blue:&blue alpha:&alpha]; } else { const CGFloat *components = CGColorGetComponents(color.CGColor); red = components[0]; green = components[1]; blue = components[2]; alpha = components[3]; }



Gracias por la dirección de Willster. Para cualquiera que esté usando color de escala de grises (creado con colorWithWhite:alpha: , el siguiente ejemplo de código le permitirá calcular el valor en blanco (el método HSV no funciona en los colores creados de esta manera).

CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0, white = 0.0; // This is a non-RGB color if(CGColorGetNumberOfComponents(self.color.CGColor) == 2) { [self.color getWhite:&white alpha:&alpha]; } else { // iOS 5 if ([self.color respondsToSelector:@selector(getRed:green:blue:alpha:)]) { [self.color getRed:&red green:&green blue:&blue alpha:&alpha]; } else { // < iOS 5 const CGFloat *components = CGColorGetComponents(self.color.CGColor); red = components[0]; green = components[1]; blue = components[2]; alpha = components[3]; } }


Solo usa memcpy:

CGColorRef tmpColor = [[currentColorView backgroundColor] CGColor]; CGFloat newComponents[4] = {}; memcpy(newComponents, CGColorGetComponents(tmpColor), sizeof(newComponents)); // now newComponents is filled with tmpColor rgba data