- 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
- }
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
}