2012-04-23 10 views
10

tôi có một vấn đề trong chuyển đổi UIColor để màu hex, ở đây những gì tôi tìm thấyhex màu từ 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]; 
} 

mã này được đem lại cho tôi # 5.576.149 (ví dụ) cho hexString, chúng tôi thấy có 7 chữ số không 6, nó không phải là một màu hex, bất kỳ trợ giúp sẽ được đánh giá cao, thx.

+0

Bạn có thể sử dụng thư viện này https: // github .com/burhanuddin353/TFTColor –

Trả lời

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

Bạn đang định dạng nó như là một chữ số với% d

Bạn muốn định dạng nó như hex với% x hoặc% X - có thể là chuỗi% s Tôi didnt kiểm tra những chức năng đang làm và những gì int hexValue đang nắm giữ

d hoặc i Signed số nguyên thập phân 392

x Unsigned thập lục phân số nguyên tuabin khí 7FA

X Unsigned thập lục phân số nguyên (chữ in hoa) tuabin khí 7FA

+0

thx, cung cấp một màu hex cho hexString, nhưng nó không cùng màu với chúng ta [Colorview_ backgroundColor], có một số thứ còn thiếu, có thể là các thành phần 0xFF * [3], Bất kỳ ý tưởng nào để thêm nó vào hexValue? –

+0

nếu màu bạn đang tìm kiếm là 5576149 = # 5515D5 chỉ cần chuyển int thành hex –

+0

NSString * hexString = [NSString stringWithFormat: @ "#% X", hexValue]; ở đây những gì tôi đã làm và nó cho tôi một giá trị hex (# 5515D5 ví dụ) nhưng những gì tôi nói là: khi tôi sử dụng màu hex này bằng javascript, tôi nhận được một màu sai, nó không chính xác cùng chúng tôi đầu vào một. –

1

Tôi cố gắng đó ngày hôm qua vì tôi đã có để có được một màu hex từ một UIColor và làm cho nó hoạt động trong javascript quá, nhưng điều này không hoạt động khi một thành phần là 0, bởi vì nó nhận được 0 thay vì 00. Vì vậy, một màu lục lam tinh khiết sẽ là RGB 0 255 255 và mã này sẽ trả về # 0ffff thay vì # 00ffff.

tôi đã thực hiện mã này từ bạn, và nó làm việc trên ứng dụng của tôi:

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

Các sylphos câu trả lời ở trên doesnt làm việc cho darkGrayColor.

này hoạt động tốt hơn (lấy từ 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

Đây là một phiên bản của điều này, nhưng định dạng như một hàm 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)]; 
}