Bonjour les champions !
J'ai fait un soft de diaporama pour une vitrine d'agence immobilière. Il m'ont demandé de rajouter des transitions entre images j'ai donc pondu le code suivant qui charge une photo par dessus l'ancienne avec une transition caré. C'est a dire que je part du centre, je colorie a la verticale le cotes gauche du centre, puis a l'horizontale au dessus du centre, puis a la verticale le cotes droit du centre, puis a l'horizontale sous le centre. Une fois le tour fini je refresh l'image et j'agrandis mon carré a la rangé de pixel suivante. Mon souci pour qu'on voye la transition j'utilise un sleep dans ma boucle. Mais cette fonction est bloquante pour le programme, ce qui ralentie toute les autres fenêtre. Comment rendre tout cela plus fluide, n'ai je d'autre solution que de pondre un thread ? ( mais je ne suis pas très a l'aise avec ça )
Merci d'avance !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 void TDiaporama::transition (AnsiString ndf) { int tr , cx, cy, x,y ; //determine le centre de l'image // plus efficasse si width et height sont impair cx = LaPhoto->Width / 2 + 1 ; cy = LaPhoto->Height / 2 + 1; TJPEGImage *LImageJPEG ; LImageJPEG = new TJPEGImage ; LImageJPEG->LoadFromFile(ndf) ; Graphics::TBitmap *source = new Graphics::TBitmap(); source->Width = LaPhoto->Width ; source->Height = LaPhoto->Height ; source->Canvas->StretchDraw(source->Canvas->ClipRect,LImageJPEG) ; LaPhoto->Canvas->Pixels[cx][cy] = source->Canvas->Pixels[cx][cy] ; for( tr = 1 ; tr < cx ; tr ++) { Sleep(5) ; x = cx -tr ; //fixe x gauche du cente for( y = cy + tr - 1 ; y >= cy - tr ; y --) //colorie le cotes gauche LaPhoto->Canvas->Pixels[x][y] = source->Canvas->Pixels[x][y] ; y = cy - tr ;//fixe y au dessus du centre for( x = cx -tr + 1 ; x <= cx + tr ; x++) //colorie le haut LaPhoto->Canvas->Pixels[x][y] = source->Canvas->Pixels[x][y] ; x = cx + tr ;//fixe x apres le centre for( y = cy - tr + 1 ; y <= cy + tr ; y ++ ) //colorie le cotes droit LaPhoto->Canvas->Pixels[x][y] = source->Canvas->Pixels[x][y] ; y = cy + tr ;//fixe y sous le centre for( x = cx + tr - 1 ; x >= cx - tr ; x-- ) //colorie le bas LaPhoto->Canvas->Pixels[x][y] = source->Canvas->Pixels[x][y] ; //affiche l'image LaPhoto->Refresh() ; } delete LImageJPEG ; delete source ; }![]()
Partager