2012-08-09 26 views
12

Ho un progetto in cui ho bisogno di memorizzare i valori RGBA di un UIColor in un database come una stringa esadecimale di 8 caratteri. Ad esempio, [UIColor blueColor] sarebbe @ "0000FFFF". so di poter ottenere i valori dei componenti in questo modo:Come si converte un UIColor in una stringa esadecimale?

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

ma non so come andare da quei valori alla stringa esadecimale. Ho visto molti post su come andare nella direzione opposta, ma nulla di funzionale per questa conversione.

risposta

21

ottenere il vostro carri convertito in int valori, poi formattare 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

Ho provato suggerimenti simili a questo prima, ma questo in realtà ha funzionato. –

+0

Metodo getRed: green: blue: alpha: è solo su iOS 5+. Che mi dici di iOS 4? – VietHung

+1

E un buon metodo per fare la conversione inversa (come se stavi salvando/caricando colori da un database/dati di base) può essere trovato qui - http://stackoverflow.com/a/12397366/553394 –

14

Qui si va. Restituisce un NSString (ad esempio ffa5678) con un valore esadecimale del colore.

- (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

Provalo con '[UIColor grayColor]' (o qualsiasi altro colore non RGB). Cattivi risultati o possibili incidenti! – rmaddy

Problemi correlati