2012-04-23 15 views
10

Tengo un problema en la conversión UIColor de color hexadecimal, aquí lo que encontrécolor hexadecimal de UIColor

CGColorRef colorref = [[Colorview_ backgroundColor] CGColor]; 

int numComponents = CGColorGetNumberOfComponents(colorref); 

if (numComponents == 4) { 
    const CGFloat *components = CGColorGetComponents(colorref); 

    int hexValue = 0xFF0000*components[0] + 0xFF00*components[1] + 0xFF*components[2]; 

    NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue]; 
} 

este código me está dando # 5576149 (por ejemplo) para HexString, nosotros vemos que hay 7 dígitos no 6, no es un color hexadecimal, cualquier ayuda será apreciada, gracias.

+0

puede utilizar esta biblioteca https: // github .com/burhanuddin353/TFTColor –

Respuesta

2
NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue]; 

va a formatear como un dígito con% d

que desea dar formato hexadecimal como con x% o% X - tal vez como cadena% s yo no comprobar cuál es la función está haciendo y lo int hexValue está sosteniendo

d o i Firmado entero decimal 392

x sin signo hexadecimal número entero 7FA

X entero hexadecimal sin signo (mayúsculas) 7FA

+0

thx, que da un color hexadecimal para hexString, pero no es del mismo color que nosotros [Colorview_ backgroundColor], falta algo, tal vez los componentes 0xFF * [3], cualquier idea de cómo agregarlo a hexValue? –

+0

si el color que está buscando es 5576149 = # 5515D5 simplemente convierta int a hex –

+0

NSString * hexString = [NSString stringWithFormat: @ "#% X", hexValue]; aquí lo que hice y me da un valor hexadecimal (# 5515D5 por ejemplo) pero lo que estoy diciendo es: cuando uso este color hexadecimal por javascript, obtengo un color incorrecto, no es exactamente lo mismo que nosotros ingrese uno. –

1

He intentado que ayer porque tenía que conseguir un color hexadecimal de un UIColor y lo hizo funcionar en javascript también, pero esto no funciona cuando un componente es 0, porque obtiene un 0 en lugar de un 00. Entonces, un cian puro sería RGB 0 255 255, y este código devolvería # 0ffff en lugar de # 00ffff.

Hice este código a la suya, y que está trabajando en mi aplicación:

-(NSString*)colorToHex:(UIColor*)color{ 

    CGColorRef colorref = [color CGColor]; 

    const CGFloat *components = CGColorGetComponents(colorref); 

    NSString *hexString = @"#"; 
    int hexValue = 0; 

    for (int i=0; i<3; i++) { 
     if (components[i] == 0) { 
      hexString = [NSString stringWithFormat:@"%@00", hexString]; 
     }else{ 
      hexValue = 0xFF*components[i]; 
      hexString = [NSString stringWithFormat:@"%@%x", hexString, hexValue]; 
     } 
    } 

    return hexString; 
} 
12

La respuesta sylphos anterior no funciona para darkGrayColor.

Esto funciona mejor (tomado de http://softteco.blogspot.jp/2011/06/extract-hex-rgb-color-from-uicolor.html):

- (NSString *) hexFromUIColor:(UIColor *)color { 
    if (CGColorGetNumberOfComponents(color.CGColor) < 4) { 
     const CGFloat *components = CGColorGetComponents(color.CGColor); 
     color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]]; 
    } 
    if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) { 
     return [NSString stringWithFormat:@"#FFFFFF"]; 
    } 
    return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(color.CGColor))[0]*255.0), (int)((CGColorGetComponents(color.CGColor))[1]*255.0), (int)((CGColorGetComponents(color.CGColor))[2]*255.0)]; 
} 
1

Aquí es una versión de este, pero el formato de una función C:

static inline NSString *hexFromUIColor(UIColor * _color) { 
    if (CGColorGetNumberOfComponents(_color.CGColor) < 4) { 
     const CGFloat *components = CGColorGetComponents(_color.CGColor); 
     _color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]]; 
    } 
    if (CGColorSpaceGetModel(CGColorGetColorSpace(_color.CGColor)) != kCGColorSpaceModelRGB) { 
     return [NSString stringWithFormat:@"#FFFFFF"]; 
    } 
    return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(_color.CGColor))[0]*255.0), (int)((CGColorGetComponents(_color.CGColor))[1]*255.0), (int)((CGColorGetComponents(_color.CGColor))[2]*255.0)]; 
} 
Cuestiones relacionadas