2012-08-09 46 views
12

Tôi có một dự án mà tôi cần lưu trữ các giá trị RGBA của UIColor trong cơ sở dữ liệu dưới dạng chuỗi thập lục phân 8 ký tự. Ví dụ: [UIColor blueColor] sẽ là @ "0000FFFF". Tôi biết tôi có thể nhận được các giá trị thành phần như sau:Làm cách nào để chuyển đổi UIColor thành chuỗi thập lục phân?

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

nhưng tôi không biết làm thế nào để đi từ những giá trị đó vào chuỗi hex. Tôi đã nhìn thấy rất nhiều bài viết về cách đi theo cách khác, nhưng không có chức năng nào cho chuyển đổi này.

Trả lời

21

Get nổi của bạn chuyển đổi sang int giá trị đầu tiên, sau đó định dạng với 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

Tôi đã thử các đề xuất tương tự như trước đây, nhưng điều này thực sự hiệu quả. –

+0

Phương thức getRed: green: blue: alpha: chỉ trên iOS 5+. Còn iOS 4 thì sao? – VietHung

+1

Và một phương pháp tốt để thực hiện chuyển đổi ngược (như nếu bạn đang lưu trữ/tải màu từ cơ sở dữ liệu/Dữ liệu cốt lõi) có thể tìm thấy ở đây - http://stackoverflow.com/a/12397366/553394 –

14

Ở đây nó đi. Trả về một số NSString (ví dụ: ffa5678) với giá trị thập lục phân của màu.

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

Hãy thử điều này với '[UIColor grayColor]' (hoặc bất kỳ màu nào khác không phải RGB). Kết quả xấu hoặc có thể xảy ra sự cố! – rmaddy

Các vấn đề liên quan