bonsoir, j'ai terminé récemment un petit programme qui permet l'ouverture d'une image bitmap constituée d'un fond noir et d'un petit objet couleur, l'utilisateur peut alors choisir un mouvement à appliquer à l'objet (exemple rotation), ainsi le programme calcule la trajectoire, crée les images successives et affiche les images à une vitesse plus ou moins grande (de manière à donner l'impression de mouvement) grace à un timer.
J'ai utilisé pour cela une classe CColorImage comportant la méthode d'affichage suivante :
j'utilise ainsi la fonction StretchDIBits. Mon programme marche bien le seul problème est que cette fonction d'affichage est relativement lente d'où un effet de mise à jour de la vue entre l'affichage de 2 images successives pas esthétique du tout.
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 void CColorImage::Afficher(CDC* pDC,int x,int y) { unsigned int hauteur; hauteur=getHauteur(); int diff=0,ligne=0,j=0; BITMAPINFO *info; BITMAPINFOHEADER infoHeader; infoHeader.biSize=sizeof(infoHeader); infoHeader.biSizeImage=0; infoHeader.biClrUsed = 0; infoHeader.biHeight = getHauteur(); infoHeader.biWidth =getLargeur(); infoHeader.biCompression = 0; infoHeader.biBitCount = 24; infoHeader.biPlanes=1; info=(BITMAPINFO*)new BYTE[sizeof(BITMAPINFOHEADER)]; memcpy( info, &infoHeader, sizeof(BITMAPINFOHEADER) ); unsigned char * pix; pix=new unsigned char[3*(getLargeur()*getHauteur())]; for(int i=0;i<getHauteur();i++) { for(int j=0;j<getLargeur();j++){ for(int k=0; k<3;k++) { pix[3*j+3*i*getLargeur()+k]=m_pppucLigne[getHauteur()-1-i][j][2-k]; } } } HDC hdc = pDC->GetSafeHdc(); StretchDIBits( hdc, x, y,getLargeur(),getHauteur(),0,0,getLargeur(),getHauteur(),pix,info,DIB_RGB_COLORS,SRCCOPY ); delete pix; pix=NULL; }
Je voudrais savoir s'il existe d'autres techniques d'affichage d'image bmp plus performantes?
au niveau des mfc j'ai vu qu'il existe le CPictureControl mais celui-ci ne peut etre initialisé qu'à partir d'une ressource qu'il faut ajouter au projet or je ne connais pas d'avance mes images donc impossibilité d'utiliser cette méthode.
merci pour toute réponse éventuelle
Partager