2009-09-30 14 views
49

मैं एक UIColor इस विधि से लौटे हो रही है:मुझे यूआईसीओलर ऑब्जेक्ट से लाल हरा नीला और अल्फा वापस कैसे मिलता है?

- (UIColor *)getColor { 
return [UIColor colorWithRed:redSlider.value green:greenSlider.value blue:blueSlider.value alpha:1.0]; 
} 

और इस तरह हो रही रंग:

SelectedColor=[(ColorPickerView *)alertView getColor]; 

अब मैं SelectedColor से लाल, हरे, नीले पाने के लिए, क्रम में उन का उपयोग करने के लिए चाहते हैं मान। मुझे 0 और 1 के बीच के मूल्य चाहिए। जब ​​भी मैं चयनितकॉलर.सीजीकॉलर का उपयोग करता हूं, तो मेरा एप्लिकेशन क्रैश हो रहा है।

+8

एक साइड नोट के लिए इनपुट से अल्फा को इंटरपोलेट कर सकते हैं; आपको नामकरण सम्मेलनों को देखना चाहिए। 'getColor' दो कारणों से खराब है, पहले यह जावा-देवताओं के लिए एक सामान्य गलती प्राप्त उपसर्ग का उपयोग करता है, दूसरी बात यह नहीं बताती कि यह किस प्रकार का रंग है। एक बेहतर नाम शायद 'उपयोगकर्ता चयनकर्ता' है।देखें कि UIKit नाम गेटर्स, और गुण, और सूट का पालन कैसे करें। – PeyloW

उत्तर

107

दुर्घटना का कारण जब SelectedColor.CGColor तक पहुँचने हो सकता है कि आप getColor से परिणाम को बनाए रखने नहीं है, शायद तुम क्या जरूरत है:

SelectedColor = [[(ColorPickerView *)alertView getColor] retain]; 

आप केवल एक UIColor से आरजीबी रंग घटक प्राप्त कर सकते हैं कि आरजीबी कलर स्पेस का उपयोग करके, क्योंकि आप colorWithRed:green:blue:alpha: का उपयोग कर रहे हैं, जो कोई समस्या नहीं है, लेकिन यदि आपका कोड बदलता है तो इसमें भिन्नता हो सकती है।

इस के साथ

मन रंग घटकों हो रही है वास्तव में आसान है:

const CGFloat* components = CGColorGetComponents(SelectedColor.CGColor); 
NSLog(@"Red: %f", components[0]); 
NSLog(@"Green: %f", components[1]); 
NSLog(@"Blue: %f", components[2]); 
NSLog(@"Alpha: %f", CGColorGetAlpha(SelectedColor.CGColor)); 
+0

धन्यवाद PeyloW। क्या आप ihpone में छवि मास्किंग के बारे में जानते हैं? –

+0

गोलाकार कोनों और इस तरह से मास्किंग की तरह? निश्चित रूप से एक नया सवाल जोड़ें। – PeyloW

+0

हाय पेलोव! मैंने इसका इस्तेमाल किया है, लेकिन जब मैं काला रंग पास करता हूं तो यह हरे रंग के रंग के घटक दे रहा है। क्या आप जानते हैं कि यह क्यों हो रहा है आप यहां भी मेरी पोस्टिंग देख सकते हैं-> http://stackoverflow.com/questions/4155642/how-to-get-color-components-of-a-cgcolor- सही ढंग से – Ganesh

4

मुझे लगता है कि आपके पास a look here होना चाहिए, जहां Ars 'मार्गदर्शिका दिखाती है कि रंग घटकों तक पहुंचने के लिए UIColor कक्षा का विस्तार कैसे किया जाए।

1

कोड के इस स्निपेट दोनों आरजीबी और ग्रेस्केल साथ काम करना चाहिए:

CGFloat *components = (CGFloat *) CGColorGetComponents(<UIColor instance>.CGColor); 
if(CGColorGetNumberOfComponents(<UIColor instance>.CGColor) == 2) 
{ 
    //assuming it is grayscale - copy the first value 
    components[2] = components[1] = components[0]; 
} 
22

यह समाधान गैर आरजीबी रंग के लिए काम करता है साथ ही उदाहरण के लिए काला या सफेद रंग।

UIColor *color = [UIColor blackColor]; 
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0; 
// iOS 5 
if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) { 
    [color getRed:&red green:&green blue:&blue alpha:&alpha]; 
} else { 
    // < iOS 5 
    const CGFloat *components = CGColorGetComponents(color.CGColor); 
    red = components[0]; 
    green = components[1]; 
    blue = components[2]; 
    alpha = components[3]; 
} 

// This is a non-RGB color 
if(CGColorGetNumberOfComponents(color.CGColor) == 2) { 
    CGFloat hue; 
    CGFloat saturation; 
    CGFloat brightness; 
    [color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]; 

} 
+0

कोड का "गैर-आरजीबी" ब्लॉक भी आईओएस 5 + है। आप इसे इस तरह चिह्नित करना चाहेंगे। –

7

ज्यादातर मामलों में यह काम करेगा, जब तक आरजीबी में रूपांतरण काम नहीं करता है।

float red, green, blue, alpha; 
BOOL conversionToRGBWentOk = [color getRed:&red green:&green blue:&blue alpha:&alpha]; 

वास्तव में ये विधियां वास्तव में हैं। यदि conversionToRGBWentOkNO है तो आपको कोई समस्या होगी।

+1

धन्यवाद, आपका सबसे अच्छा समाधान मैंने कभी देखा है। –

+1

लेकिन यह मेरे आईओएस 4.3 सिम्युलेटर पर एक दुर्घटना का कारण बनता है। यह आईओएस 5 + संगत है। –

2

तुम सिर्फ साधारण इस

CGFloat red,green,blue,alpha; 

[UIColorobject getRed:&red green:&green blue:&blue alpha:&alpha]; 
लाल, हरे, नीले और अल्फा में

कर आप rgb मूल्य प्राप्त करता है, तो आप किसी भी सवाल पूछें ...

धन्यवाद

+0

दो लोगों ने पहले से ही कोड पोस्ट किया है ... – nschum

0

बस जोड़ने उदाहरण में दिखाए गए अनुसार ColorLiteral। एक्सकोड आपको रंगों की पूरी सूची के साथ संकेत देगा जो आप चुन सकते हैं।

self.view.backgroundColor = ColorLiteral 
0

मुझे लगता है कि यह जाने का एक तरीका होगा। यदि आपको अल्फा पैरामीटर का उपयोग करने की आवश्यकता है, तो आप आर जी और बी

- (UIColor *)getColorBetweenColor:(UIColor *)color1 andColor:(UIColor *)color2 percentage:(CGFloat)percent { 
    CGFloat red1, green1, blue1, alpha1; 
    CGFloat red2, green2, blue2, alpha2; 

    [color1 getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1]; 
    [color2 getRed:&red2 green:&green2 blue:&blue2 alpha:&alpha2]; 

    double resultRed = red1 + percent * (red2 - red1); 
    double resultGreen = green1 + percent * (green2 - green1); 
    double resultBlue = blue1 + percent * (blue2 - blue1); 

    return [UIColor colorWithRed:resultRed green:resultGreen blue:resultBlue alpha:1]; 
}