Snippet: /drawmix

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 290 fois - Téléchargée 32 fois

Contenu du snippet

Applique un effet de transparence d'une image sur une autre. La différence avec le code que j'avais posté il ya quelque temps à propos de ca est que la methode est differente.
Ici le code reproduit l'effet de transparence obtenu avec la commande /setlayer avec un pourcentage de transparence défini par l'utilisateur.

Syntaxe:
/drawmix @input1 x1 y1 w h @input2 x2 y2 @output x3 y3 %age
Mixe le rectangle de coordonées x1 y1 w h de @input 1 avec le rectangle de coordonées x2 y2 w h de @input2 et le dessine aux coordonées x3 y3 dans @output
Si %age est spécifié, il indique le pourcentage de visibilité de @input1 dans le rendu final.

Source / Exemple :


alias drawmix {
  /*
  Le but de ce code est de donner un effet de transparence sans utiliser de grille de transparence avec un drawcopy -t
  Pour cela on va evaluer la couleur de chaque pixel des deux image et determiner le code rgb situé à tant de % entre les deux rgb

  • /
; Petite verification avant de démarrer :p if (!$window($1)) || (!$window($6)) || (!$window($9)) || ($11 == $null) halt ;Je met les infos utiles pendant la loop dans des var. Je ne détaillerai pas trop le fonctionnement de ma loop car je prefere laisser a chacun le soin de choisir sa propre methode. var %per = $calc(100 - $iif(!$12,50,$12)), %xk = $2, %xf = $calc(%xk + $4), %ys = $3, %yf = $calc(%ys + $5), %xk1 = $7, %ys1 = $8, %xk2 = $10, %ys2 = $11, %win1 = $1, %win2 = $6, %win3 = $9 ; La llop va tracer ligne par ligne en augmantant l'ordonée de 1 a chaque fin de ligne while (%ys <= %yf) { var %xs = %xk, %xs1 = %xk1, %xs2 = %xk2 while (%xs <= %xf) { /* Afin d'expliquer comment je détermine le coide rgb, je vais prendre un exemple simple. Je souhaite déterminer le réel x situé a p% d'un intervalle [a,b] ou a et b réels On a: x= a + (a-b)*p/100 Je ne m'étendrai pas sur l'explication de ce calcul. Celui ci fonctionne que l'on prenne l'intervalle dans le bon sens ou non (a < b ou a > b) On applique ainsi ce calcul sur chaque valeur r g b (prises séparément et non dans le code rgb en entier) de chaque pixel des deux images a mixer. On rassemble ces données dans un $rgb et on a plus qu'a dessiner le point aux bonnes coordonées
  • /
var %rgb1 = $rgb($getdot(%win1,%xs,%ys)), %rgb2 = $rgb($getdot(%win2,%xs1,%ys1)), %r1 = $gettok(%rgb1,1,44), %g1 = $gettok(%rgb1,2,44), %b1 = $gettok(%rgb1,3,44), %r2 = $gettok(%rgb2,1,44), %g2 = $gettok(%rgb2,2,44), %b2 = $gettok(%rgb2,3,44) drawdot -rn %win3 $rgb($round($calc(%r1 + (%r2 - %r1) * %per / 100),0),$round($calc(%g1 + (%g2 - %g1) * %per / 100),0),$round($calc(%b1 + (%b2 - %b1) * %per / 100),0)) 1 %xs2 %ys2 inc %xs inc %xs1 inc %xs2 } inc %ys inc %ys1 inc %ys2 } ;ce drawdot fait suite o flag -n présent dans les commandes draw* présentes plus haut (voir l'help pour plus de details) drawdot %win3 }

Conclusion :


Pour le ($11 == $null) je voi d'ici les remarques arriver mais je n'ai pas mis (!$11) car celui ci fonctionnerait dans le cas ou $11 = 0 (possible si on veu dessiner le mix a une ordonnées nulle

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
16 septembre 2005

Bonjour, ton cote m'interresse ...
mais voila je debute un peux personnellement et j aimerais savoir comment je poourrais utiliser ton code avec un nombre d'image illimité pour un proget personnel :)

Merci d'avance ...
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
j'adore , dommage que mirc soit si lent ... :o) 10 :D
Messages postés
126
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
29 août 2004

Vala pour les commentaires, si c'est pas compréhensible pmsg moi
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005

j'ai rencontré le meme problème que toi hier soir c'est dingue lol !!!

par contre je comprend pas comment ça marche, j'aimerais bien avoir une version commentée pour aller plus loin dans le code.

beau boulot

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.