Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
bubar
samira_2004 wrote:
bonjour
j'ai un petit problème avec la fonction setpixel et Draw dans Director MX
je voudrais permettre à un utilisateur de dessiner avec un crayon
la fonction Draw produit un trait très fin, la fonction setpixel dessine point par point , il y a donc une discontinuité gênante
Pourriez-vous s'il vous plait me proposer une méthode qui me permettra de résoudre ce problème
je vous remercie par avance
Il y en a plusieurs, mais avec des inconvénients : 1 - Quand l'utilisateur clique sur ta zone de dessin, tu stockes la position de la souris dans une variable A chaque frame suivante si l'utilisateur a le bouton appuyé, tu traces une ligne entre la position sauvegardée et la nouvelle position de la souris. Puis tu enregistres cette nouvelle position dans la variable de 1. Pour tracer une ligne, tu utilises draw. Regarde dans l'aide, tu peux parfaitement définir une taille de dessin avec le paramêtre linesize Mais tu verras vite les limites
2 - la meilleure méthode, mais plus complexe. En gros tu fais la même chose que pour 1 (stocke la position à chaque frame). Mais au lieu d'utiliser draw, tu utilises copypixels. Copypixels ne te permet pas de dessiner une ligne. Il faut donc appliquer un algo de dessin de ligne (je n'en ai pas en tête, mais ça se trouve facilement sur le net). Cet algo te permet de connaitre tous les pixels à dessiner pour créer une ligne entre 2 points. Et ainsi pour chaque point que te renvoit l'algo, tu "copypixels" un bitmap aux bonne coordonnées. Ex : p0 : point stocké à la frame précédente p1 : position actuelle de la souris on dessineligne repeat while TRUE -- ici l'algo de dessin d'une ligne. Il te renvoie le pixel suivant pour tracer la ligne --entre p0 et p1 --j'appelle p2 ce pixel x=p2[1] --coordonné x du pixel y=p2[2] --coordonné y du pixel larg=5 -- la largeur du trait que tu veux dessiner dlarg=float(larg)/2 --la demi largeur du trait tonbmpfinal.image.copypixels(member("ton bmp original").image,rect(x-dlarg,y-dlarg,x+dlarg,y+dlarg),member("ton bmp original").rect) end repeat end
ton_bmp_original doit être un simple point de la couleur que tu veux utiliser pour dessiner. Cette technique implique que tu as un membre par couleur nécessaire (si tu autorises l'utilisateur à dessiner en 5 couleurs, il te faut 5 membres). Si tu as beaucoup de couleur, il suffit alors d'utiliser un seul membre. Tu peux, avant d'appliquer l'algo, dessiner dans ce membre un point avec la couleur choisie grâce à setpixel ou draw.
J'espère que c'est assez clair ? N'hésite pas à demander des précisions.
-- Bubar
samira_2004 wrote:
bonjour
j'ai un petit problème avec la fonction setpixel et Draw dans
Director MX
je voudrais permettre à un utilisateur de dessiner avec un crayon
la fonction Draw produit un trait très fin, la fonction setpixel
dessine point par point , il y a donc une discontinuité gênante
Pourriez-vous s'il vous plait me proposer une méthode qui me
permettra de résoudre ce problème
je vous remercie par avance
Il y en a plusieurs, mais avec des inconvénients :
1 - Quand l'utilisateur clique sur ta zone de dessin, tu stockes la
position de la souris dans une variable
A chaque frame suivante si l'utilisateur a le bouton appuyé, tu traces
une ligne entre la position sauvegardée et la nouvelle position de la
souris. Puis tu enregistres cette nouvelle position dans la variable de
1.
Pour tracer une ligne, tu utilises draw. Regarde dans l'aide, tu peux
parfaitement définir une taille de dessin avec le paramêtre linesize
Mais tu verras vite les limites
2 - la meilleure méthode, mais plus complexe.
En gros tu fais la même chose que pour 1 (stocke la position à chaque
frame). Mais au lieu d'utiliser draw, tu utilises copypixels.
Copypixels ne te permet pas de dessiner une ligne. Il faut donc
appliquer un algo de dessin de ligne (je n'en ai pas en tête, mais ça se
trouve facilement sur le net).
Cet algo te permet de connaitre tous les pixels à dessiner pour créer
une ligne entre 2 points.
Et ainsi pour chaque point que te renvoit l'algo, tu "copypixels" un
bitmap aux bonne coordonnées.
Ex :
p0 : point stocké à la frame précédente
p1 : position actuelle de la souris
on dessineligne
repeat while TRUE
-- ici l'algo de dessin d'une ligne. Il te renvoie le pixel
suivant pour tracer la ligne
--entre p0 et p1
--j'appelle p2 ce pixel
x=p2[1] --coordonné x du pixel
y=p2[2] --coordonné y du pixel
larg=5 -- la largeur du trait que tu veux dessiner
dlarg=float(larg)/2 --la demi largeur du trait
tonbmpfinal.image.copypixels(member("ton bmp
original").image,rect(x-dlarg,y-dlarg,x+dlarg,y+dlarg),member("ton bmp
original").rect)
end repeat
end
ton_bmp_original doit être un simple point de la couleur que tu veux
utiliser pour dessiner.
Cette technique implique que tu as un membre par couleur nécessaire (si
tu autorises l'utilisateur à dessiner en 5 couleurs, il te faut 5
membres).
Si tu as beaucoup de couleur, il suffit alors d'utiliser un seul membre.
Tu peux, avant d'appliquer l'algo, dessiner dans ce membre un point avec
la couleur choisie grâce à setpixel ou draw.
J'espère que c'est assez clair ? N'hésite pas à demander des précisions.
j'ai un petit problème avec la fonction setpixel et Draw dans Director MX
je voudrais permettre à un utilisateur de dessiner avec un crayon
la fonction Draw produit un trait très fin, la fonction setpixel dessine point par point , il y a donc une discontinuité gênante
Pourriez-vous s'il vous plait me proposer une méthode qui me permettra de résoudre ce problème
je vous remercie par avance
Il y en a plusieurs, mais avec des inconvénients : 1 - Quand l'utilisateur clique sur ta zone de dessin, tu stockes la position de la souris dans une variable A chaque frame suivante si l'utilisateur a le bouton appuyé, tu traces une ligne entre la position sauvegardée et la nouvelle position de la souris. Puis tu enregistres cette nouvelle position dans la variable de 1. Pour tracer une ligne, tu utilises draw. Regarde dans l'aide, tu peux parfaitement définir une taille de dessin avec le paramêtre linesize Mais tu verras vite les limites
2 - la meilleure méthode, mais plus complexe. En gros tu fais la même chose que pour 1 (stocke la position à chaque frame). Mais au lieu d'utiliser draw, tu utilises copypixels. Copypixels ne te permet pas de dessiner une ligne. Il faut donc appliquer un algo de dessin de ligne (je n'en ai pas en tête, mais ça se trouve facilement sur le net). Cet algo te permet de connaitre tous les pixels à dessiner pour créer une ligne entre 2 points. Et ainsi pour chaque point que te renvoit l'algo, tu "copypixels" un bitmap aux bonne coordonnées. Ex : p0 : point stocké à la frame précédente p1 : position actuelle de la souris on dessineligne repeat while TRUE -- ici l'algo de dessin d'une ligne. Il te renvoie le pixel suivant pour tracer la ligne --entre p0 et p1 --j'appelle p2 ce pixel x=p2[1] --coordonné x du pixel y=p2[2] --coordonné y du pixel larg=5 -- la largeur du trait que tu veux dessiner dlarg=float(larg)/2 --la demi largeur du trait tonbmpfinal.image.copypixels(member("ton bmp original").image,rect(x-dlarg,y-dlarg,x+dlarg,y+dlarg),member("ton bmp original").rect) end repeat end
ton_bmp_original doit être un simple point de la couleur que tu veux utiliser pour dessiner. Cette technique implique que tu as un membre par couleur nécessaire (si tu autorises l'utilisateur à dessiner en 5 couleurs, il te faut 5 membres). Si tu as beaucoup de couleur, il suffit alors d'utiliser un seul membre. Tu peux, avant d'appliquer l'algo, dessiner dans ce membre un point avec la couleur choisie grâce à setpixel ou draw.
J'espère que c'est assez clair ? N'hésite pas à demander des précisions.