2012-08-17 14 views
9

संभव डुप्लिकेट:
How to do alpha blend fast?अल्फा सम्मिश्रण सी में 2 RGBA रंग

अल्फा मिश्रण 2 RGBA (पूर्णांक) रंग का सबसे तेज़ तरीका क्या है?

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

मैं ध्यान में रखते हुए कि मिश्रण से अंतिम जिसके परिणामस्वरूप रंग कोई पारदर्शिता, पूरी तरह से अपारदर्शी (अल्फा = 0xff)

+0

यह लिंक – PerracoLabs

+0

की सहायता नहीं करता है क्या आप हमारे प्रश्न और उस बीच के अंतर को समझने में हमारी सहायता कर सकते हैं? ऐसा लगता है कि हम में से कई उलझन में हैं। – sblom

+2

डुप्लिकेट नहीं। यह सादे पुराने 'सी' में अल्फा मिश्रण के बारे में पूछता है। माना जाता है कि यह डुप्लिकेट एक समान प्रश्न पूछता है, लेकिन 'सी ++' के संबंध में। दो समान, लेकिन बहुत अलग भाषाओं। –

उत्तर

13
int blend(unsigned char result[4], unsigned char fg[4], unsigned char bg[4]) 
{ 
    unsigned int alpha = fg[3] + 1; 
    unsigned int inv_alpha = 256 - fg[3]; 
    result[0] = (unsigned char)((alpha * fg[0] + inv_alpha * bg[0]) >> 8); 
    result[1] = (unsigned char)((alpha * fg[1] + inv_alpha * bg[1]) >> 8); 
    result[2] = (unsigned char)((alpha * fg[2] + inv_alpha * bg[2]) >> 8); 
    result[3] = 0xff; 
} 

मैं डॉन 'के साथ समाप्त होना चाहिए, सी में सबसे तेज़ तरीका खोजने की कोशिश कर रहा हूँ टी यह कितना तेज़ है, लेकिन यह सब पूर्णांक है। यह अल्फा (और inv_alpha) को 8.8 फिक्स्ड-पॉइंट प्रस्तुतियों में बदलकर काम करता है। इस तथ्य के बारे में चिंता न करें कि अल्फा का न्यूनतम मूल्य 1 है। उस स्थिति में, fg [3] 0 था, जिसका अर्थ है कि अग्रभूमि पारदर्शी है। मिश्रण 1 * एफजी + 256 * बीजी होगा, जिसका मतलब है कि एफजी के सभी बिट परिणाम के बाहर स्थानांतरित हो जाएंगे।

यदि आप 64 बिट पूर्णांक में अपने आरजीबीए पैक करते हैं, तो आप इसे बहुत तेज़ कर सकते हैं। फिर आप एक ही अभिव्यक्ति के साथ समानांतर में सभी तीन परिणाम रंगों की गणना कर सकते हैं।

+1

वास्तव में सही काम करता है, और वास्तव में काफी तेज़ है। – PerracoLabs

+2

इसे सुनकर खुशी हुई - अवांछित कोड के लिए बुरा नहीं, जबकि 2 बजे बर्बाद हो गया? =] – Sniggerfardimungus

+1

+1 मैं आज के बेहतर हिस्से के लिए काम करने के लिए अल्फा मिश्रण कैसे प्राप्त करें, इस बारे में अपने दिमाग को तोड़ रहा हूं। आपका एल्गोरिदम पहला है जिसका मैंने परीक्षण किया है वास्तव में ... अच्छा, काम करता है। –

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