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 बिट पूर्णांक में अपने आरजीबीए पैक करते हैं, तो आप इसे बहुत तेज़ कर सकते हैं। फिर आप एक ही अभिव्यक्ति के साथ समानांतर में सभी तीन परिणाम रंगों की गणना कर सकते हैं।
यह लिंक – PerracoLabs
की सहायता नहीं करता है क्या आप हमारे प्रश्न और उस बीच के अंतर को समझने में हमारी सहायता कर सकते हैं? ऐसा लगता है कि हम में से कई उलझन में हैं। – sblom
डुप्लिकेट नहीं। यह सादे पुराने 'सी' में अल्फा मिश्रण के बारे में पूछता है। माना जाता है कि यह डुप्लिकेट एक समान प्रश्न पूछता है, लेकिन 'सी ++' के संबंध में। दो समान, लेकिन बहुत अलग भाषाओं। –