Programme de dessin Avec Delphi
Fermé
fahim0788
Messages postés
111
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
19 décembre 2011
-
28 juin 2008 à 08:17
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 8 mai 2009 à 19:58
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 8 mai 2009 à 19:58
A voir également:
- Programme de dessin Avec Delphi
- Telecharger delphi 7 - Télécharger - Langages
- Programme demarrage windows 10 - Guide
- Groupe de 4 personnages dessin animé ✓ - Forum Loisirs / Divertissements
- Programme (x86) ✓ - Forum Windows
5 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
30 juin 2008 à 23:10
30 juin 2008 à 23:10
Dans l'idée seulement (je ne parle pas Delphi) voici comment je ferais (si j'avais la méthode)
Il faudrait partir d'un point de ton Espace, appelons le Remplisseur
Admettons que ton Remplisseur possède une couleur R et que ton Espace possède une couleur E.
Il te faut créer deux piles, la première ne contient que ton Remplisseur et la deuxième est vide au départ, mais également une liste contenant tous les points que tu as déjà traité (vide au départ).
Tant que ta première pile n'est pas vide, tu regardes chaque Remplisseur qu'elle contient, tu le rempli de la bonne couleur, puis tu regardes chacun de ces Voisins (verticalement ou horizontalement comme un +).
Si le Voisin est de couleur R ou Eet qu'il n'a pas encore été traité (d'où l'importance de la liste), alors tu le place dans la deuxième pile, sinon tu ne fais rien. Une fois la première pile vide, tu l'inverse avec la deuxième (les Voisins deviennent donc des Remplisseurs).
En suivant ce raisonnement je pense que tu ne devrais pas avoir de récursivité infinie (ps : ne pas oublier le cas du bord de l'image, qu'il faudrait considérer comme n'étant ni de couleur E ni de couleur R)
Un exemple pour mieux expliquer ce à quoi je pense (au cas où je me serai mal exprimé):
Sur mon clavier numérique j'ai les touches 1,2,3,4,5 qui forment mon espace à colorier, (6,7,8 ne sont pas de la bonne couleur, la couleur de 9 n'a pas d'importance), je clique sur le 4 pour recolorier mon espace.
Tour de boucle 1 :
Pile1=4, Pile2=vide, Liste=vide
Je colorie 4
Je regarde les voisins de 4 (1,5,7) 1 et 5 sont de la bonne couleur
Pile1=vide, Pile2=1,5, Liste=4
J'inverse les piles
Tour de boucle 2 :
Pile1=1,5, Pile2=vide, Liste=4
Je colorie 1
Je regarde les voisins de 1 (2,4) 2 et 4 sont de la bonne couleur mais 4 a déjà été traité
Pile1=5, Pile2=2, Liste=4,1
Je colorie 5
Je regarde les voisins de 5 (2,4,6,8) 2 et 4 sont de la bonne couleur mais ont déjà été traités
Pile1=vide, Pile2=2, Liste=4,1,5
J'inverse les piles
Tour de boucle 3 :
Pile1=2, Pile2=vide, Liste=4,1,5
Je colorie 2
Je regarde les voisins de 2 (1,3,5) 1, 3 et 5 sont de la bonne couleur mais 1 et 5 ont déjà été traités
Pile1=vide, Pile2=3, Liste=4,1,5,2
J'inverse les piles
Tour de boucle 4 :
Pile1=3, Pile2=vide, Liste=4,1,5,2
Je colorie 3
Je regarde les voisins de 3 (2,6) 2 est de la bonne couleur mais a déjà été traité
Pile1=vide, Pile2=vide, Liste=4,1,5,2,3
J'inverse les piles
Pile1=vide : Fin de la boucle -> L'espace a été totalement recolorié
Il faudrait partir d'un point de ton Espace, appelons le Remplisseur
Admettons que ton Remplisseur possède une couleur R et que ton Espace possède une couleur E.
Il te faut créer deux piles, la première ne contient que ton Remplisseur et la deuxième est vide au départ, mais également une liste contenant tous les points que tu as déjà traité (vide au départ).
Tant que ta première pile n'est pas vide, tu regardes chaque Remplisseur qu'elle contient, tu le rempli de la bonne couleur, puis tu regardes chacun de ces Voisins (verticalement ou horizontalement comme un +).
Si le Voisin est de couleur R ou Eet qu'il n'a pas encore été traité (d'où l'importance de la liste), alors tu le place dans la deuxième pile, sinon tu ne fais rien. Une fois la première pile vide, tu l'inverse avec la deuxième (les Voisins deviennent donc des Remplisseurs).
En suivant ce raisonnement je pense que tu ne devrais pas avoir de récursivité infinie (ps : ne pas oublier le cas du bord de l'image, qu'il faudrait considérer comme n'étant ni de couleur E ni de couleur R)
Un exemple pour mieux expliquer ce à quoi je pense (au cas où je me serai mal exprimé):
Sur mon clavier numérique j'ai les touches 1,2,3,4,5 qui forment mon espace à colorier, (6,7,8 ne sont pas de la bonne couleur, la couleur de 9 n'a pas d'importance), je clique sur le 4 pour recolorier mon espace.
Tour de boucle 1 :
Pile1=4, Pile2=vide, Liste=vide
Je colorie 4
Je regarde les voisins de 4 (1,5,7) 1 et 5 sont de la bonne couleur
Pile1=vide, Pile2=1,5, Liste=4
J'inverse les piles
Tour de boucle 2 :
Pile1=1,5, Pile2=vide, Liste=4
Je colorie 1
Je regarde les voisins de 1 (2,4) 2 et 4 sont de la bonne couleur mais 4 a déjà été traité
Pile1=5, Pile2=2, Liste=4,1
Je colorie 5
Je regarde les voisins de 5 (2,4,6,8) 2 et 4 sont de la bonne couleur mais ont déjà été traités
Pile1=vide, Pile2=2, Liste=4,1,5
J'inverse les piles
Tour de boucle 3 :
Pile1=2, Pile2=vide, Liste=4,1,5
Je colorie 2
Je regarde les voisins de 2 (1,3,5) 1, 3 et 5 sont de la bonne couleur mais 1 et 5 ont déjà été traités
Pile1=vide, Pile2=3, Liste=4,1,5,2
J'inverse les piles
Tour de boucle 4 :
Pile1=3, Pile2=vide, Liste=4,1,5,2
Je colorie 3
Je regarde les voisins de 3 (2,6) 2 est de la bonne couleur mais a déjà été traité
Pile1=vide, Pile2=vide, Liste=4,1,5,2,3
J'inverse les piles
Pile1=vide : Fin de la boucle -> L'espace a été totalement recolorié
fahim0788
Messages postés
111
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
19 décembre 2011
10
1 juil. 2008 à 00:37
1 juil. 2008 à 00:37
Merci beuacoup pour ton aide je vais essayer tous ça et je vais te répondre après
fahim0788
Messages postés
111
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
19 décembre 2011
10
4 juil. 2008 à 00:14
4 juil. 2008 à 00:14
Salut, pouvez vous me dire quelle est la taille des piles?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
4 juil. 2008 à 00:19
4 juil. 2008 à 00:19
Une pile n'a pas de taille, plus tu rajoutes d'éléments et plus sa taille est importante, plus tu en enlèves et plus elle diminue, c'est pourquoi il faut bien penser à la vider (et selon le langage utilisé, libérer l'espace "réservé" lors de la création de la pile)
fahim0788
Messages postés
111
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
19 décembre 2011
10
7 juil. 2008 à 00:48
7 juil. 2008 à 00:48
salut, enfin j'ai réalisé ce que tu as dis, mais il y'a un problème avec la bordure si elle est de la mème couleur que le remplisseur le remplissage l'a dépasse, je veux corriger ça...aussi avec cette méthode il y'a un petit retard car l'opération se fait pixels par pixels, il y'a une autre méthode qui fait le remplissage avec des lignes elle est plus rapide je ne sais pas si tu l'as? merci et bonne nuit...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
7 juil. 2008 à 08:18
7 juil. 2008 à 08:18
En suivant ce raisonnement je pense que tu ne devrais pas avoir de récursivité infinie (ps : ne pas oublier le cas du bord de l'image, qu'il faudrait considérer comme n'étant ni de couleur E ni de couleur R)
Tout est dit...
Au début du post tu avais une boucle infinie, et je t'ai donné une méthode, j'ai pas dit que c'était la meilleure, juste que ça me semblait faire ce que tu voulais (j'ignorais moi même la lenteur de la méthode).
En ce qui concerne la bordure, bah... J'avais prévenu (lol). Selon comment tu as programmé ton code je dirais qu'il faudrait d'office mettre la bordure avec une "couleur impossible" (un peu comme le nil des piles...)
Tout est dit...
Au début du post tu avais une boucle infinie, et je t'ai donné une méthode, j'ai pas dit que c'était la meilleure, juste que ça me semblait faire ce que tu voulais (j'ignorais moi même la lenteur de la méthode).
En ce qui concerne la bordure, bah... J'avais prévenu (lol). Selon comment tu as programmé ton code je dirais qu'il faudrait d'office mettre la bordure avec une "couleur impossible" (un peu comme le nil des piles...)
7 mai 2009 à 08:31
SVP KX si vous pouvez me programmer un tour de boucle en C comme exemple pour que je puisse mieux manipuler les piles et la liste en C....
MERCI
Crdlt
8 mai 2009 à 19:58
Donc en considerant un "dessin" représenté par un tableau d'entier où l'entier est la couleur, on doit colorier le point x0, y0 et toute la surface de même couleur qui l'entoure (le principe du "remplissage" dans Paint)