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