Tutorial d'initiation A la programmation avec l'API Windows
Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
Chapitre 3Les fenêtres13. Affichage d'une image
Cours théorique :
Avant de pouvoir afficher une image, il faut tout d'abord la charger. Nous ne traiterons ici que les images bitmap. En effet, ce sont les seules images prises en charge par l'API Windows. Pour effectuer des traitements sur les images avec des fonctions du GDI (Graphic Device Interface), il faut donc tout d'abord les convertir au format bitmap. Les images sont considérées comme des objets du GDI, au même titre que les polices. On peut donc utiliser les fonctions de manipulation d'objet (ex. : SelectObject() ou DeleteObject()) aussi bien sur des images que sur des polices.
On peut charger une image à partir du disque ou encore à partir des ressources du programme. Pour cela, on peut utiliser deux fonctions : LoadBitmap() ou LoadImage(). La fonction LoadBitmap() est beaucoup moins complète que LoadImage(), il est donc préférable d'utiliser cette dernière. Ce n'est cependant pas une obligation. Une fois l'image chargée en mémoire, le GDI retourne un 'handle' (de type HBITMAP) sur l'image. Elle peut alors être affichée.
Le résultat de l'affichage dépend bien entendu du contexte d'affichage utilisé (en particulier du nombre de couleurs qu'il comprend). Pour afficher l'image, on utilisera la fonction DrawState(). Cette fonction n'affiche pas nécessairement des bitmaps, elle peut aussi afficher des icônes par exemple. De plus, cette fonction est capable de modifier la taille d'affichage du bitmap. Il n'est cependant pas recommandé d'agrandir la taille des images à l'affichage car l'agrandissement est alors de très mauvaise qualité.
Voici un exemple de fonction dessinant une image chargée depuis un fichier dans la fenêtre spécifiée :
void PrintBmp(HWND hWnd, char *filename) { HBITMAP hBmp; HDC hDC; hBmp=(HBITMAP)LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); hDC=GetDC(hWnd); DrawState(hDC,NULL,NULL,(LPARAM)hBmp,NULL,0,0,0,0,DST_BITMAP); DeleteObject(hBmp); ReleaseDC(hWnd,hDC); }
|