मैं रनटाइम पर मनमाना NSColor मानों को उलटा करने का एक तरीका ढूंढ रहा हूं, और ऐसा करने के लिए कोई भी अंतर्निहित विधि प्रतीत नहीं होती है।क्या एनएससीओलर मूल्यों को बदलने के लिए एक पारंपरिक विधि है?
NSColor * invertedColor = [someOtherColor inverted];
यहाँ श्रेणी विधि प्रोटोटाइप है कि मैं का उपयोग कर रहा है:
@implementation NSColor (MyCategories)
- (NSColor *)inverted
{
NSColor * original = [self colorUsingColorSpaceName:
NSCalibratedRGBColorSpace];
return ...?
}
@end
किसी को भी रिक्त स्थान को भरने कर सकते हैं
मैं NSColor
विस्तार करने के लिए इस प्रकार एक वर्ग का उपयोग किया जाएगा? यह सही नहीं होना चाहिए, लेकिन मैं इसे कुछ समझना चाहता हूं। यानी .:
[[[NSColor someColor] inverted] inverted]
एक रंग बहुत मूल रंग[[NSColor whiteColor] inverted]
के पास में परिणाम बहुत[NSColor blackColor]
उल्टे रंग के करीब color wheel के विपरीत दिशा में होगा होगी। (लाल & हरे, पीले & बैंगनी, आदि)
अल्फा मूल्य मूल NSColor
के रूप में ही रहना चाहिए। मैं केवल रंग को पारदर्शीता में बदलने की तलाश में हूं।
अद्यतन 3: (! अब रंग में)
ऐसा लगता है कि एक complementary color (एक एक रंग 180 डिग्री मूल रंग से दूर के साथ रंग) का उपयोग काफी पर्याप्त नहीं है, सफेद के बाद से और काला वास्तव में एक रंग मूल्य नहीं है।
CGFloat hue = [original hueComponent];
if (hue >= 0.5) { hue -= 0.5; } else { hue += 0.5; }
return [NSColor colorWithCalibratedHue:hue
saturation:[original saturationComponent]
brightness:(1.0 - [original brightnessComponent])
alpha:[original alphaComponent]];
रंग अभी भी 180 डिग्री घुमाया जाता है, लेकिन मैं यह भी चमक घटक को उलटने के लिए इतना है कि बहुत ही गहरे रंग बहुत उज्ज्वल (और इसके विपरीत हो जाते हैं: phoebus द्वारा प्रदान की जवाब से शुरू, यह क्या मैं के साथ आया है)। यह काले और सफेद मामलों का ख्याल रखता है, लेकिन यह लगभग हर रंग को काले रंग में बदल देता है (जो मेरे डबल-इनवर्जन नियम का उल्लंघन करता है)। यहाँ परिणाम हैं:
color swatch #1 http://img29.imageshack.us/img29/8548/invert1.jpg
अब, Peter Hosey's approach बहुत सरल है, और यह बेहतर परिणाम:
return [NSColor colorWithCalibratedRed:(1.0 - [original redComponent])
green:(1.0 - [original greenComponent])
blue:(1.0 - [original blueComponent])
alpha:[original alphaComponent]];
color swatch #2 http://img29.imageshack.us/img29/1513/invert2.jpg
इसके बारे में सीधा होने के लिए उपरोक्त :) – phoebus
नोट: ग्रे = 0.5, 0.5, 0.5 के लिए; पूरक ही है। – Pang