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() :
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();
}
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
 
void AfficherSnake()
{
 
for(i=0;i<100;i++)
{
Image1->Canvas->Pixels[snake[i].x][snake[i].y]=clRed;
}
}
Les appels :
Lorsque l'utilisateur clique sur un bouton,la procédure MiseAJour devra s'exécuter 200 fois:
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.
}
}
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 !
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
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
}
}
Quelqu'un aurait une solution pour éviter ces scintillement dus au rafraichissement?

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