Afficher un message
Vieux 15/09/2008, 21h15   #5
Akabane87
Membre
 
Date d'inscription: 01/07/2008
Messages: 14
Par défaut

Merci pour tout daaa57150. J'ai regardé de près ta fonction et j'ai essayé de l'utiliser dans ma situation. Tout va bien (la vitesse me convient de mon cas), mais par contre ta méthode de calcul est fausse. Dans mon cas, j'avais nettoyé la surface cible avec RGBA(0,0,0,0) et je voulais afficher dessus une image avec de la semi transparence (le tout affiché sur un fond blanc à la fin). J'ai pu alors remarqué que ta méthode me fonçait tous mes pixels semi-transparents.
Et effectivement d'après ton calcul, c'est assez logique . J'ai donc corrigé ta fonction et maintenant elle fonctionne parfaitement .

Voilà le calcul en question:

Code:
if(a_sum>0)
{
    da_left=255.0f-fda; //dest alpha left
    sa_left=255.0f-fsa; //src alpha left
                    
    rr=(int)((fdr*fda + fsr*da_left)/255.0f);
    rg=(int)((fdg*fda + fsg*da_left)/255.0f);
    rb=(int)((fdb*fda + fsb*da_left)/255.0f);
    ra=255-(int)((da_left*sa_left)/255.0f);
    pixel8888result=RGBA(rr,rg,rb,ra);
}
ps: désolé, si je suis passé en C . En tout cas ça fonctionne, c'est sûr .
Akabane87 est déconnecté   Réponse avec citation