2012-08-09 21 views
12

मेरे पास एक प्रोजेक्ट है जहां मुझे 8-वर्ण हेक्साडेसिमल स्ट्रिंग के रूप में डेटाबेस में यूआईसीओलर के आरजीबीए मानों को स्टोर करने की आवश्यकता है। उदाहरण के लिए, [यूआईसीओलर ब्लूकॉलर] @ 0000FFFF होगा। मैं जानता हूँ कि मैं बहुत की तरह घटक मूल्यों को प्राप्त कर सकते हैं:मैं एक यूआईसीओलर को हेक्साडेसिमल स्ट्रिंग में कैसे परिवर्तित करूं?

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

लेकिन मैं कैसे उन मूल्यों से हेक्स स्ट्रिंग पर जाने के लिए पता नहीं है। मैंने दूसरी तरफ जाने के तरीके पर बहुत सी पोस्ट देखी हैं, लेकिन इस रूपांतरण के लिए कुछ भी कार्यात्मक नहीं है।

उत्तर

21

अपने तैरता पहले मूल्यों int करने के लिए, तो 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

मैंने पहले इस तरह के सुझावों का प्रयास किया है, लेकिन यह वास्तव में काम करता है। –

+0

विधि getRed: हरा: नीला: अल्फा: केवल आईओएस 5+ पर है। आईओएस 4 के बारे में क्या? – VietHung

+1

और रिवर्स रूपांतरण करने के लिए एक अच्छी विधि (जैसे कि आप डेटाबेस/कोर डेटा से रंग संग्रहित/लोड कर रहे हैं) यहां पाए जा सकते हैं - http://stackoverflow.com/a/12397366/553394 –

14

यहाँ यह हो जाता है। रंग के हेक्साडेसिमल मान के साथ NSString (उदा। ffa5678) देता है।

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

इसे '[यूआईसीओलर ग्रे रंग] '(या कोई अन्य गैर-आरजीबी रंग) के साथ आज़माएं। खराब परिणाम या संभव एक दुर्घटना! – rmaddy

संबंधित मुद्दे

 संबंधित मुद्दे