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 :
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;
}
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.

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