2011-12-31 13 views
7

क्या UIColor को हेक्साडेसिमल मान में परिवर्तित करने का कोई आसान तरीका है?
या क्या हमें आरजीबी घटकों को CGColorGetComponents के साथ प्राप्त करना है और फिर वहां से काम करना है?UIColor से हेक्साडेसिमल (वेब ​​रंग)

उदाहरण CGColorGetComponents(color.CGColor)[0] * 256?

उत्तर

7

मैं एरिका सदून की यूआईसीओलर श्रेणी का उपयोग करने पर विचार करूंगा। इसमें हेक्स प्रस्तुतियों सहित मुफ्त में बहुत सारी कार्यक्षमता शामिल है। इसका उपयोग करना बहुत आसान है, बस इसे उस वर्ग हेडर में जोड़ें जिसे आप इसका उपयोग कर रहे हैं या इसे अंतिम लचीलापन के लिए पूर्व-संकलित शीर्षलेख में जोड़ें। आप पूर्व संकलित शीर्षक के जोड़ रहे हैं तो कुछ इस तरह के लिए इतना समान कार्य करें: https://github.com/erica/uicolor-utilities

:

#ifdef __OBJC__ 
    #import <Foundation/Foundation.h> 
    #import <UIKit/UIKit.h> 
    #import "UIColor-Expanded.h" 
#endif 

तो आप यह इतना NSLog(@"%@", [myColor hexStringFromColor]);

GitHub UIColor श्रेणी के लिए लिंक की तरह उपयोग कर सकते हैं

इसके बारे में ArsTechnica लेख: http://arstechnica.com/apple/guides/2009/02/iphone-development-accessing-uicolor-components.ars

+0

महान लाइब्रेरी के रूप में बाहर आता है। इसके लिए धन्यवाद। – fes

+0

कोई समस्या नहीं है। उम्मीद करते है कि यह आपके लिए काम करें! – lewiguez

1

जहां तक ​​मुझे पता है, समाधान में कोई भी नहीं है।
नोट हालांकि, आपको 256 के बजाय 255 से गुणा करना चाहिए।

हेक्साडेसिमल प्रतिनिधित्व प्राप्त करना एक आसान काम है, इसलिए आपको मैन्युअल रूप से स्ट्रिंग बनाने के लिए कई परेशानी नहीं होगी।

NSLog(@"%X%X%X", redInteger, greenInteger, blueInteger); 
+0

मुझे लगता है कि यह करने का एक चालाक तरीका है। चूंकि घटक एक फ्लोट नंबर देता है, तो आप इसे पूर्णांक में सटीक रूप से कैसे परिवर्तित कर सकते हैं? उदाहरण के लिए एक बैंगनी रंग के लिए: UIDeviceRGBColorSpace 0.548638 0.554697 1 1 – fes

+0

आपके पास परिणाम कास्टिंग या गोल करके पूर्णांक होगा, परीक्षण आरजीबी 0.548638 0.554697 1, छंटनी, गोलाकार, मुझे हर बार * एक ही * बैंगनी रंग दे रहा है। –

+0

क्या आप मुझे अपने छेड़छाड़ और गोल करने का उदाहरण दे सकते हैं?हो सकता है कि मैं बहुत अधिक गोल कर रहा हूं लेकिन मुझे हमेशा 1 मिल रहा है और% X% X% X 111 – fes

9

मुझे भी एक यूआईसीओलर को अपने हेक्स घटकों में परिवर्तित करना पड़ा।

जैसा कि पहले से ही लीविगेज द्वारा इंगित किया गया है github पर एक बहुत अच्छी श्रेणी है जो कि सभी चीजें करता है।

लेकिन क्योंकि मैं यह जानना चाहता था कि यह कैसे किया जाता है मैंने आरजीबी रंगों के लिए अपना सरल कार्यान्वयन किया।

+ (NSString*)colorToWeb:(UIColor*)color 
{ 
    NSString *webColor = nil; 

    // This method only works for RGB colors 
    if (color && 
     CGColorGetNumberOfComponents(color.CGColor) == 4) 
    { 
     // Get the red, green and blue components 
     const CGFloat *components = CGColorGetComponents(color.CGColor); 

     // These components range from 0.0 till 1.0 and need to be converted to 0 till 255 
     CGFloat red, green, blue; 
     red = roundf(components[0] * 255.0); 
     green = roundf(components[1] * 255.0); 
     blue = roundf(components[2] * 255.0); 

     // Convert with %02x (use 02 to always get two chars) 
     webColor = [[NSString alloc]initWithFormat:@"%02x%02x%02x", (int)red, (int)green, (int)blue]; 
    } 

    return webColor; 
} 

सभी प्रतिक्रियाओं का स्वागत है!

+0

यह विधि पूरी तरह से काम करती है, धन्यवाद! – BFeher

2

व्यापक रूप से उपयोग किए जाने वाले स्ट्रिंग आधारित समाधान के अलावा, यहां एक हेक्स (पूर्णांक) आधारित समाधान है। उपयोग:

UIColor* color = lf_rgb(0x120aef); 
log(@"color %.6x", color.hex_rgb); 

और आपको "रंग 120aef" मिलेगा। मैं https://github.com/superarts/LCategory में इन कोड डाल देता हूँ, या आप अपने स्वयं कोड बैंक में भी कॉपी-पेस्ट कर सकते हैं:

#define lf_rgb(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 

@interface UIColor (lc_rgb) 
- (NSInteger)hex_rgb; 
@end 

@implementation UIColor (lc_rgb) 
- (NSInteger)hex_rgb 
{ 
    CGFloat r, g, b, a; 
    BOOL result = [self getRed:&r green:&g blue:&b alpha:&a]; 
    // log(@"rgba: %f, %f, %f, %f", r * 255, g * 255, b * 255, a * 255); 
    if ((result == NO) || (a != 1.0f)) 
     return -1; 
    return 
     (NSInteger)(r * 255) * 256 * 256 + 
     (NSInteger)(g * 255) * 256 + 
     (NSInteger)(b * 255) * 1; 
} 
@end 
0

यह वह जगह है मैं यह कैसे स्विफ्ट 3 के साथ किया था है:

extension UIColor { 
    var hex:String{ 
     get{ 
      var red:CGFloat = 0 
      var blue:CGFloat = 0 
      var green:CGFloat = 0 
      var alpha:CGFloat = 0 

      self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) 
      let rgb:Int = (Int)(red*255)<<16 | (Int)(green*255)<<8 | (Int)(blue*255)<<0 
      return String.localizedStringWithFormat("#%06x", rgb) 
     } 
    } 
} 

या आप कर सकते हैं इसे एक विधि बनाओ। मुझे बस color.hex बनाम color.hex() दिखता है।

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

  • कोई संबंधित समस्या नहीं^_^