Bonjour à tous,
J'ai développé une petite application de traitement d'image,et parmi les fonctionnalités (algorithmes) de celle ci,y en a une qui me pose problème.
Je vais essayé de vous épargner au maximum les détails inutiles de mon problème afin de ne pas vous embrouiller !
J'ai implémenté une procédure MiseAJour() qui va mettre à jour tous les éléments d'un vecteur de type TPoint (Snake[100] ) .Ensuite cette procédure devra faire appel à une autre procédure AfficherSnake().Cette dernière devra afficher tout les points du vecteur Snake dans un TImage contenant une BMP.
Voici en gros le corp de la procédure MiseAJour() :
Et voici le corp de la procédure AfficherSnake() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void MiseAJour() { for(i=0;i<100;i++) { //Mise à jour du vecteur Snake[] Snake[i].x=f1(i); Snake[i].y=f2(i); //Les fonctions f1 et f2 ne nous importent pas } //Affichage de tous les points du vecteur Snake dans Image1 (TImage) AfficherSnake(); }
Les appels :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void AfficherSnake() { for(i=0;i<100;i++) { Image1->Canvas->Pixels[snake[i].x][snake[i].y]=clRed; } }
Lorsque l'utilisateur clique sur un bouton,la procédure MiseAJour devra s'exécuter 200 fois:
Le problème est que je ne vois pas les changements pendant la boucle ( for(j=1;j<200;j++) ).Je vois seulement le résultat final !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void __fastcall TForm1::Button1Click(TObject *Sender) { //Sauvegarder l'image: Image2->picture=Image1->picture; for(j=1;j<200;j++) { Image1->Picture=Image2->Picture;//afin d'effacer les points de l'itération precédante. MiseAJour();//Mise à jour + affichage des nouveau points. } }
En executant l'instruction :
toutes les 10 itérations réglerai le problème,mais en provoquant des Scintillement dans l'image ce qui est vraiment pas beau!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part Image1->Refresh
Quelqu'un aurait une solution pour éviter ces scintillement dus au rafraichissement?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void __fastcall TForm1::Button1Click(TObject *Sender) { //Sauvegarder l'image: Image2->picture=Image1->picture; for(j=1;j<200;j++) { Image1->Picture=Image2->Picture;//afin d'effacer les points de l'itération precédante. MiseAJour();//Mise à jour + affichage des nouveau points. if(j%10==0) {Image1->refresh();}//raffraichissement toutes les 10 itérations } }
Je m'excuse de la longueur de ce message en vous assurant que j'ai essayé de le résumer au maximum...En tout cas si vous êtes arrivé jusqu'ici en sa lecture je vous en remercie déja ...
Partager