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;
}
ı don ile bitirmek gerektiğini dikkate alarak, C en hızlı yol bulmaya çalışıyorum Ne kadar hızlı olduğunu biliyorum, ama hepsi tamsayı. Alfa (ve inv_alpha) 8,8 sabit nokta gösterimlerine dönüştürerek çalışır. Alfa'nın min değerinin 1 olduğu konusunda endişelenmeyin. Bu durumda fg [3] 0'du, yani ön plan şeffaftır. karışımlar fg tüm bitleri sonucu üzerinden kaydırılabilir anlamına gelir 1 * fg + 256 * bg, olacaktır. Eğer 64 bitlik tamsayılar içinde RGBAs paketlenmiş eğer
Sen, gerçekten de çok hızlı yapabilirdi. Daha sonra üç sonuç rengini tek bir ifadeyle paralel olarak hesaplayabilirsiniz.
Bu bağlantı – PerracoLabs
bize sorunuzu ve bu arasındaki farkı anlamaya yardımcı olabilir yardım etmiyor? Birçoğumuzun kafası karışmış gibi görünüyor. – sblom
Yinelenen değil. Bu düz eski 'C' alfa karıştırma hakkında sorar. Söz konusu yinelenen soru, benzer bir soru soruyor, fakat 'C++' ile ilgili olarak. İki benzer ama çok farklı diller. –