2012-04-23 2 views
10

У меня есть проблема в преобразовании UIColor в шестнадцатеричный цвет, вот что я нашелшестнадцатеричный цвет от 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]; 
} 

этот код дает мне # 5576149 (например) для шестнадцатеричной, нас вы видите, есть 7 цифр не 6, это не шестнадцатеричный цвет, любая помощь будет оценена, thx.

+0

Вы можете использовать эту библиотеку https: // GitHub .com/burhanuddin353/TFTColor –

ответ

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

Вы форматированием как цифра с% г

Вы хотите отформатировать его в шестнадцатеричном формате с% х или% X - может быть, как струна% с я не проверить, что функция делает и то, что int hexValue держит

д или я десятичное число 392

х беззнаковое шестнадцатеричное число 7FA

X беззнаковое шестнадцатеричное число (заглавные буквы) 7FA

+0

thx, которые дают шестнадцатеричный цвет для hexString, но это не тот же цвет у нас [Colorview_ backgroundColor], что-то не хватает, возможно, компоненты 0xFF * [3], любая идея, как добавить его в hexValue? –

+0

если цвет, который вы ищете, это 5576149 = # 5515D5 только конвертировать int в hex –

+0

NSString * hexString = [NSString stringWithFormat: @ "#% X", hexValue]; вот что я сделал, и он дал мне шестнадцатеричное значение (например, # 5515D5), но я говорю: когда я использую этот гексаговый цвет по javascript, я получаю неправильный цвет, это не совсем то же самое, что мы ввод один. –

1

Я попробовал вчера, потому что я должен был получить шестнадцатеричный цвет из UIColor и сделал его работу в JavaScript тоже, но это не работает, когда компонент 0, потому что он получает 0 вместо 00. Таким образом, чистый голубой будет RGB 0 255 255, и этот код вернет # 0ffff вместо # 00ffff.

Я сделал этот код с вашей, и он работает на мое приложение:

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

sylphos Ответ выше не работает для darkGrayColor.

Это работает лучше (из 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

Вот версия, но отформатированы как функция 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)]; 
} 
Смежные вопросы