Snippet: /drawmix

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

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.