2009-10-05 19 views
7

क्वार्ट्ज 2 डी में, CGColorSpaceCreateLab() समारोह के रूप में निम्नानुसार एक range पैरामीटर परिभाषित लेता है:क्वार्ट्ज 2 डी: CGColorSpaceCreateLab: रेंज पैरामीटर का उद्देश्य?

CGFloat रेंज [4]: ​​ एक * और ख के लिए मान्य मानों की श्रेणी निर्दिष्ट करें कि 4 नंबर की एक सरणी * रंग अंतरिक्ष के घटक। ए * घटक हरे से लाल रंग के मानों का प्रतिनिधित्व करता है, और बी * घटक नीले से पीले रंग के मूल्यों का प्रतिनिधित्व करता है।

सवाल यह है कि, यह पैरामीटर वास्तव में क्या करता है?

मैं कम से कम तीन संभावित परिदृश्यों के बारे में सोच सकता हूं।

विकल्प 1: शायद यह मापता है घटक को महत्व देता

मैं विभिन्न श्रेणियों के साथ दो रंग रिक्त स्थान है कहते हैं:

CGFloat range1[] = { -10, 10, -10, 10 }; 
CGFloat range2[] = { -100, 100, -100, 100 }; 
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1); 
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2); 

मैं एक ही घटक मूल्यों के साथ और की निर्दिष्ट सीमा के भीतर रंग बनाने प्रत्येक स्थान:

CGFloat components[] = { 50, 10, 10, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components); 
CGColorRef color2 = CGColorCreate(space2, components); 

color1 और color2 टी का प्रतिनिधित्व करते हैं वह वही रंग? या range पैरामीटर कुछ तरीकों से घटकों को स्केल करता है, जिससे ये दो अलग-अलग रंग होते हैं? ? (उत्तरार्द्ध, क्या range के लिए मूल्य मानक CIELAB से मेल खाती है, तो स्केलिंग

विकल्प 2 समन्वय: शायद यह क्लिप घटक

को महत्व देता है को देखते हुए दो रिक्त स्थान ऊपर परिभाषित, मैं बजाय निम्नलिखित रंग बनाते हैं :

CGFloat components[] = { 50, 50, 50, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components); 
CGColorRef color2 = CGColorCreate(space2, components); 

अब color1 करते हैं और color2 एक ही रंग का प्रतिनिधित्व करते हैं या range पैरामीटर {50 color1 के घटकों क्लिप करता है? , 10, 10, 1}? (यदि उत्तरार्द्ध, बिंदु क्या है? एक गैमट परिभाषा का एक बेहद मोटा अनुमान? सुनिश्चित करना मान किसी अन्य डेटा प्रकार के साथ संगत सीमा के भीतर रहते हैं?)

विकल्प 3: शायद यह कहीं और उपयोग किया जाता है, जैसे गैमट मैपिंग एक अवधारणात्मक प्रतिपादन उद्देश्य

एल * ए * बी * मानों की सीमा के बारे में कुछ विचार रखने के लिए गैमट मैपिंग के साथ विशेष रूप से अवधारणात्मक मामले में सहायता हो सकती है, लेकिन फिर से, ऐसा लगता है कि यह एक अनुमानित अनुमान है कि मैं यह न देखें कि यह विशेष रूप से उपयोगी क्यों होगा।

विकल्प 4: कुछ और?

उत्तर

7

मैं कुछ परीक्षण किया है, और ऐसा लगता है कि जवाब है:

range पैरामीटर मापता है एक * और ख * घटक मूल्यों।

इसके अलावा, घटक मान निर्दिष्ट सीमा तक चिपकने लगते हैं।

निम्न उदाहरण में

तो:

CGFloat range1[] = { -10, 10, -10, 10 }; 
CGFloat range2[] = { -100, 100, -100, 100 }; 
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1); 
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2); 

CGFloat components1[] = { 50, 10, 10, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components1); 

CGFloat components2[] = { 50, 100, 100, 1 }; 
CGColorRef color2 = CGColorCreate(space2, components2); 

CGColorRef color3 = CGColorCreate(space1, components2); 
  • color1 और color2 एक ही रंग का प्रतिनिधित्व करते हैं।
  • color3 निर्दिष्ट घटक मानों को बनाए रखने के लिए प्रतीत होता है, भले ही वे रंग स्थान द्वारा निर्दिष्ट सीमा से बाहर हों।

अंत में, यह एक * और बी * अक्ष के लिए मानक CIELAB स्केल के साथ एक रंग स्थान में {-127, 127, -127, 127} के एक सीमा विनिर्देश की तरह दिखता है।

यदि किसी के पास अधिक आधिकारिक उत्तर है, तो कृपया पोस्ट करें!

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