2012-08-09 23 views
12

Tengo un proyecto donde necesito almacenar los valores RGBA de un UIColor en una base de datos como una cadena hexadecimal de 8 caracteres. Por ejemplo, [UIColor blueColor] sería @ "0000FFFF". Sé que puedo obtener los valores de los componentes de este modo:¿Cómo convierto un UIColor en una cadena hexadecimal?

CGFloat r,g,b,a; 
[color getRed:&r green:&g blue: &b alpha: &a]; 

pero no sé cómo pasar de esos valores a la cadena hexadecimal. He visto muchas publicaciones sobre cómo hacer para el otro lado, pero nada funcional para esta conversión.

Respuesta

21

obtener su flota se convierte a int valores en primer lugar, a continuación, formatee con stringWithFormat:

int r,g,b,a; 

    r = (int)(255.0 * rFloat); 
    g = (int)(255.0 * gFloat); 
    b = (int)(255.0 * bFloat); 
    a = (int)(255.0 * aFloat); 

    [NSString stringWithFormat:@"%02x%02x%02x%02x", r, g, b, a]; 
+0

He intentado con sugerencias similares a esta antes, pero esta funcionó. –

+0

Método getRed: verde: azul: alfa: solo en iOS 5+. ¿Qué pasa con iOS 4? – VietHung

+1

Y un buen método para realizar la conversión inversa (como si está almacenando/cargando colores desde una base de datos/Core Data) se puede encontrar aquí - http://stackoverflow.com/a/12397366/553394 –

14

Aquí va. Devuelve NSString (por ejemplo, ffa5678) con un valor hexadecimal del color.

- (NSString *)hexStringFromColor:(UIColor *)color 
{ 
    const CGFloat *components = CGColorGetComponents(color.CGColor); 

    CGFloat r = components[0]; 
    CGFloat g = components[1]; 
    CGFloat b = components[2]; 

    return [NSString stringWithFormat:@"%02lX%02lX%02lX", 
      lroundf(r * 255), 
      lroundf(g * 255), 
      lroundf(b * 255)]; 
} 
+0

Pruebe esto con '[UIColor grayColor]' (o cualquier otro color que no sea RGB). ¡Malos resultados o posible caída! – rmaddy

Cuestiones relacionadas