2012-10-18 53 views

उत्तर

7

संक्षेप में, premultiplied का अर्थ है कि अल्फा मान पिक्सल के रंग घटक मानों को भी प्रभावित करेगा जब एक पिक्सेल जो अपारदर्शी नहीं है।

क्वार्ट्ज 2 डी ड्राइंग गाइड से:

बिटमैप्स एक अल्फा घटक है, चाहे रंग घटकों पहले से ही अल्फा मूल्य से गुणा कर रहे हैं। Premultiplied अल्फा एक स्रोत रंग का वर्णन करता है जिसका घटक पहले से ही अल्फा मान द्वारा गुणा किया गया है। Premultiplying एक छवि के प्रतिपादन को प्रति रंग घटक के अतिरिक्त गुणात्मक ऑपरेशन को समाप्त करने की गति को गति देता है। उदाहरण के लिए, आरजीबी कलर स्पेस में, प्रील्टिप्लाइड अल्फा के साथ एक छवि को प्रतिपादित करने से छवि में प्रत्येक पिक्सेल के लिए तीन गुणा संचालन (लाल समय अल्फा, हरे रंग के अल्फा, और नीले समय अल्फा) को समाप्त किया जाता है।

बीटीडब्लू, प्री-गुणा की संभावना है कि एपीआई आपको उपयोग करने के लिए मजबूर करेगी क्योंकि यह क्वार्ट्ज की वरीयता है। सौभाग्य से, रूपांतरण भयानक नहीं हैं (हानिकारक ओटीओएच ...)।


इस float घटकों में है समझाने के लिए, सीमा [0...1] का उपयोग कर सबसे छोटा रास्ता।

यदि हमारे RGBA इनपुट प्रतिनिधित्व है:

typedef struct t_rgba { float r,g,b,a; } t_rgba; 
const t_rgba rgba = { 0.5, 0.5, 0.5, 0.5 }; 

तो यह पहले से गुणा करने के लिए:

t_rgba rgba_PreMul = rgba; 
rgba_PreMul.r *= rgba_PreMul.a; 
rgba_PreMul.g *= rgba_PreMul.a; 
rgba_PreMul.b *= rgba_PreMul.a; 

तब करने के लिए इसे डी-पूर्व गुणा करते हैं:

t_rgba rgba_DePreMul = rgba_PreMul; 
if (0.0 < rgba_DePreMul.a && 1.0 > rgba_DePreMul.a) { 
    const float ialpha = 1.0/rgba_DePreMul.a; 
    rgba_DePreMul.r *= ialpha; 
    rgba_DePreMul.g *= ialpha; 
    rgba_DePreMul.b *= ialpha; 
} 

आप हो सकता है वहां भी कुछ संतृप्ति चाहते हैं।

अब यह मूल रूप है, जिसे अन्य संख्यात्मक प्रतिनिधित्वों के लिए पुनर्निर्मित किया जा सकता है। ध्यान दें कि इन रूपांतरणों हानिकारक हैं। साथ ही, सावधान रहें कि पूर्ववर्ती बिटमैप्स को पास न करें जहां नियमित बिटमैप्स की अपेक्षा की जाती है, और इसके विपरीत।

+1

मुझे पिक्सेल [(255/255.0), (100/255.0), (20/255.0), (40/255.0)] मिला है। अगर मैं सही ढंग से समझता हूं 'प्रीमिलीप्लाइड' का अर्थ है कि 'लाल * = (40/255.0)' और इसी तरह, लेकिन जब मैं 'केसीजी इमेज अलाफा फर्स्ट' का उपयोग करता हूं तो 'लाल = लाल'? –

+1

@TomaszSzulc हां। और विस्तारित। – justin

+1

आपको बहुत बहुत धन्यवाद। –