2013-03-15 6 views
9

चलें कहते हैं कि मैं एक UIColorमैं यूआईसीओलर के रंग, चमक और संतृप्ति को कैसे संशोधित कर सकता हूं?

UIColor *color = [UIColor redColor]; 

अब मैं संतृप्ति/रंग/brigthness को संशोधित करना चाहते है, मुझे लगता है कि कैसे करते हो? मैंने प्रलेखन पढ़ा था लेकिन मैं अभी भी वास्तव में उलझन में हूं

मैं यूआईसीओलर I ([यूआईसीओलोर रेडकोलर]) को संशोधित करना चाहता हूं, कुछ प्राथमिकताओं के साथ एक नया रंग शुरू नहीं करना चाहता हूं। मैं मूल को बनाए रखने में इसे कैसे संशोधित करूं? मुझे colorWithHue:saturation:brightness:alpha: विधि के बारे में पता है, मुझे लाल रंग को रखने, मौजूदा रंग की गुणों को अपडेट करने की आवश्यकता है।

+0

इस पोस्ट में देखो http://stackoverflow.com/questions/10071756/is-there-function-to-convert-uicolor-to- ह्यू-संतृप्ति-चमक – Spire

+0

आप CoreImage ढांचे का उपयोग कर सकते हैं। इससे आपको बहुत मदद मिलेगी। –

उत्तर

18

आप अपने रंग पर getHue:saturation:brightness:alpha: कॉल कर सकते हैं की स्थापना द्वारा इस विधि का उपयोग कर सकते हैं, तो मान को समायोजित, तो का उपयोग कर अपने समायोजित घटकों के साथ एक नया रंग बनाने +[UIColor colorWithHue:saturation:brightness:alpha:]

CGFloat hue, saturation, brightness, alpha ; 
BOOL ok = [ <color> getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha ] ; 
if (!ok) { 
    // handle error 
} 
// ... adjust components.. 

UIColor * newColor = [ UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:alpha ] ; 
+0

धन्यवाद आपके उत्तर के लिए बहुत कुछ, यह काम किया! मैं बस इसे एक मिनट में स्वीकार करूँगा (स्टैक ओवरफ्लो का कहना है कि मुझे इंतजार करना है) – s6luwJ0A3I

+4

यह काम करता है, हालांकि यह आपकी आवश्यकता को पूरा नहीं करता है कि यह एक ही रंग वस्तु है। लेकिन आप जो चाहते हैं वह संभव नहीं है। यूआईसीओलर अपरिवर्तनीय है - इसलिए आपको हमेशा एक नया रंग ऑब्जेक्ट बनाना होगा। – nielsbot

+0

@nielsbot मुझे एक पत्थर के साथ 2 पक्षियों को मारने के लिए बुल के अपने संक्षिप्त उपयोग को पसंद है, इसलिए बोलने के लिए। उत्कृष्ट उत्तर ... –

0

आप निम्न मान

UIColor *customColor = [UIColor colorWithHue: x.xx saturation: x.xx brightness: x.xx alpha: 1.0];

0

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIColor_Class/Reference/Reference.html

वहाँ एक वर्ग मजेदार है colorWithHue:saturation:brightness:alpha:

साथ ction बेशक आप पहली बार किसी भी परिवर्तन करने से पहले getHue:saturation:brightness:alpha: उपयोग कर सकते हैं जब आप [UIColor redColor]

0

साथ init आप बस द्वारा

[UIColor colorWithHue:YourHueValue saturation:YourSaturationValue brightness:YourBrightnessValueValue alpha:1.00]; 

अल्फा इस संशोधित कर सकते हैं देखने के धुँधलापन को दर्शाता है और यह पर्वतमाला 0.0 - 1,0

-4
[UIColor colorWithHue:0.10 saturation:0.16 brightness:0.13 alpha:1.00]; 
+0

कोड की एक साधारण रेखा को एक अच्छा जवाब नहीं माना जाता है। कृपया यह भी समझाएं कि आपने ऐसा क्यों किया और यह कैसे मदद कर रहा है। –

0

UIColor संतृप्ति/रंग/brigthness नहीं बदल सकते हैं, तो आप आप कर सकते हैं CoreImage।

कुछ नमूना नीचे कोड:

CIFilter *filter = [CIFilter filterWithName:@"CIColorControls"]; 

[filter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputContrast"]; 
[filter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputSaturation"]; 
[filter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputBrightness"]; 


[filter setValue:_A_CIImage_ forKey:kCIInputImageKey]; 

CIImage *_outputImage = filter.outputImage; 

CIContext context = [CIContext contextWithOptions:nil]; 

CGImageRef outputImageRef = [context createCGImage: _outputImage fromRect:[_outputImage extent]]; 

आप iOS के बारे में किसी भी सवाल है, तो आप http://weibo.com/iOSHomePage और निजी पत्र के लिए पूरी तरह से क्षमता प्रतिक्रिया me.My पर जा सकते हैं।

+0

colorWithHue: संतृप्ति: चमक: अल्फा: निर्दिष्ट अस्पष्टता और एचएसबी रंग स्थान घटक मानों का उपयोग करके रंग ऑब्जेक्ट बनाता है और देता है। यह विधि एचएसबी कलर स्पेस के साथ रंग बनाने के लिए प्रयोग की जाती है, जैसे आरजीबी कलर स्पेस। लाल रंग को अन्य रंग में नहीं बदला जा सकता है। – zhoujinhao

0
CGSize imageSize = [ba size]; 
CGRect imageExtent = CGRectMake(0,0,imageSize.width,imageSize.height); 

// Create a context containing the image. 
UIGraphicsBeginImageContext(imageSize); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

[sourceimage drawInRect:imageExtent]; 
// Draw the hue on top of the image. 
CGContextSetBlendMode(context, kCGBlendModeHue); 
[[UIColor colorWithHue:yourvalue saturation:1.0 brightness:1 alpha:1.0] set]; 
UIBezierPath *imagePath = [UIBezierPath bezierPathWithRect:imageExtent]; 
[imagePath fill]; 

CGImageRef imageref=CGBitmapContextCreateImage(context); 

UIImage *result =[UIImage imageWithCGImage:imageref]; 

CGImageRelease(imageref); 

पहली दो पंक्तियों में यह छवि आकार और छवि संदर्भ का वर्णन करता है। CGContextRef कोर ग्राफिक्स में एक संदर्भ बनाने के लिए प्रयोग किया जाता है। उसके बाद 5 वीं पंक्ति वह छवि है जिसे आप छवि के रंग और आयत को लागू करना चाहते हैं। उस मिश्रण मोड के बाद जो महत्वपूर्ण है। उस यूआई colorWithHue के बाद जिसमें रंग, संतृप्ति, चमक और अल्फा के मूल्य पारित किए जाते हैं। उचित प्रभाव प्राप्त करने के लिए अल्फा के 1.0 मान दें। और अंत में आपको uicolor.create बेजरपाथ सेट करना चाहिए या आप सीधे cgcontextsetfill(context) दे सकते हैं। अंत में imageref बनाएं और उस छवि को UIImage पर रखें। अंत में, हमेशा कोरियोग्राफिक्स में, स्मृति समस्याओं से बचाव के लिए CGImageRelease जारी करें।

+0

प्रदान किया गया कोड मदद कर सकता है, लेकिन इसे एक अच्छा उत्तर देने के लिए आपको यह भी वर्णन करना चाहिए कि क्यों/कोड आपके समस्या को हल करता है। – ZygD

+0

पहली दो पंक्तियों में यह छवि आकार और छवि आयत का वर्णन करता है। cgcontext कोर ग्राफिक्स में एक संदर्भ बनाने के लिए उपयोग किया जाता है। उसके बाद 5 वीं पंक्ति छवि है आप छवि के रंग और आयत लागू करना चाहते हैं। उस मिश्रण मोड के बाद जो महत्वपूर्ण है। उसके बाद ui colorWithHue जिसमें उचित प्रभाव प्राप्त करने के लिए रंग, संतृप्ति, चमक और अल्फा का पास मान अल्फा के 1.0 मान देता है। अंत में uicolor.create bezerpath सेट करें या आप सीधे cgcontextsetfill (संदर्भ)। अंत में imageref बनाएं और उस छवि को uiimage में रखें। अंत में कोरियोग्राफिक्स में अंत में स्मृति समस्या के खिलाफ cgimageRef रिलीज़ करें। –

+0

उत्तर के अंदर प्रासंगिक जानकारी रखना हमेशा बेहतर होता है, क्योंकि सभी को नहीं, अगर उन्हें कोई समस्या है, तो टिप्पणियों में खोद जाएगा। इसके अलावा, [कोरियोग्राफिक्स] (http://www.thefreedictionary.com/choreographic) द्वारा आपका क्या मतलब था? – ZygD

2

दुर्भाग्य से यह डिफ़ॉल्ट द्वारा एक UIColor की hsba या rgba से कोई भी मान बदलने के लिए काफी परेशानी है।

// create a new UIColor object with hue & brightness increased by 0.2 
color.change(.hue,  by: 0.2) 
    .change(.brightness, by: 0.2) 

पुस्तकालय भी कहते हैं कुछ:

import HandyUIKit 

// each line creates a new UIColor object with the new value 
color.change(.hue,  to: 0.1) 
color.change(.brightness, to: 0.2) 
color.change(.saturation, to: 0.3) 
color.change(.alpha,  to: 0.4) 

// chaining them returns a single new object with all values changed 
color.change(.hue,  to: 0.5) 
    .change(.brightness, to: 0.6) 
    .change(.saturation, to: 0.7) 

वहाँ भी विकल्प रिश्तेदार परिवर्तन लागू करने के लिए कर रहे हैं: HandyUIKit (कार्थेज के माध्यम से इसे स्थापित) का उपयोग करना अपने जीवन बहुत आसान बना देता है अन्य आसान यूआई विशेषताएं अपनी परियोजना में - अधिक जानकारी के लिए गिटहब पर इसकी रीडमे चेकआउट करें।

मुझे आशा है कि इससे मदद मिलती है!

2

यहाँ तेज UIColor विस्तार है जो आपके लिए उपयोगी हो सकता है:

extension UIColor { 

    func modified(withAdditionalHue hue: CGFloat, additionalSaturation: CGFloat, additionalBrightness: CGFloat) -> UIColor { 

     var currentHue: CGFloat = 0.0 
     var currentSaturation: CGFloat = 0.0 
     var currentBrigthness: CGFloat = 0.0 
     var currentAlpha: CGFloat = 0.0 

     if self.getHue(&currentHue, saturation: &currentSaturation, brightness: &currentBrigthness, alpha: &currentAlpha){ 
      return UIColor(hue: currentHue + hue, 
          saturation: currentSaturation + additionalSaturation, 
          brightness: currentBrigthness + additionalBrightness, 
          alpha: currentAlpha) 
     } else { 
      return self 
     } 
    } 
} 
संबंधित मुद्दे

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