Redimenssion image avec hbitmap [Résolu]

glipper 246 Messages postés dimanche 2 juin 2002Date d'inscription 11 septembre 2016 Dernière intervention - 13 juil. 2006 à 00:08 - Dernière réponse : gagah1 509 Messages postés samedi 28 juin 2003Date d'inscription 3 août 2010 Dernière intervention
- 13 juil. 2006 à 15:14
bonjour,

j'ai reussi à charger une image depuis un fichier, et la faire apparaître dans un boutons (dans une dialogbox). J'ai donc procédé comme ceci :

HBITMAP hbmp;
BITMAP bmp;
hbmp = FileToBitmap("./photos/photo.jpg");     // charge l'image depuis un fichier
GetObject(hbmp,sizeof(bmp),&bmp);      // apporte des informations sur la bitmap dont la taille en pixels

// on redimenssionne le bouton à la taille de la bitmap :
SetWindowPos(GetDlgItem(hwnd,IDC_PHOTO),NULL,20,60,bmp.bmWidth,bmp.bmHeight,SWP_SHOWWINDOW);

// on affiche le bitmap dans le bouton
SendMessage((GetDlgItem(hwnd, IDC_PHOTO)),BM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)(HANDLE)(hbmp));

Mais dans le cas où l'image est trop grosse, je voudrais l'afficher à une taille inférieur à sa taille d'origine (miniature !). La fonction Bitblt fonctionne avec des HDC, moi j'ai un HBITMAP. Comment dois-je m'y prendre ?

Merci,
Glipper
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
gagah1 509 Messages postés samedi 28 juin 2003Date d'inscription 3 août 2010 Dernière intervention - 13 juil. 2006 à 11:13
3
Merci
hDC = GetDC(hwnd);
hDC2 = CreateCompatibleDC(hDC);
hDC3 = CreateCompatibleDC(hDC);




hbmp_resized = CreateCompatibleBitmap(hDC, bmp.bmWidth / 2, bmp.bmHeight / 2);








SelectObject(hDC3, hbmp_resized);






SelectObject(hDC2, hbmp);








StretchBlt(hDC3, 0, 0, bmp.bmWidth / 2, bmp.bmHeight / 2, hDC2, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);

Merci gagah1 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de gagah1
gagah1 509 Messages postés samedi 28 juin 2003Date d'inscription 3 août 2010 Dernière intervention - 13 juil. 2006 à 09:49
0
Merci
Crée un autre HBITMAP en utilisant:
- GetDC
- CreateCompatibleBitmap
- CreateCompatibleDC
- StretchBlt
Commenter la réponse de gagah1
glipper 246 Messages postés dimanche 2 juin 2002Date d'inscription 11 septembre 2016 Dernière intervention - 13 juil. 2006 à 10:47
0
Merci
Voila ce que j'ai fait :

HBITMAP hbmp, hbmp_resized;
BITMAP bmp;
HDC hDC, hDC2;

hbmp = FileToBitmap("./photos/photo.jpg");    // charge l'image depuis un fichier
GetObject(hbmp,sizeof(bmp),&bmp);      // apporte des informations sur la bitmap dont la taille en pixels

hDC = GetDC(hwnd);
hDC2 = CreateCompatibleDC(hDC);
hbmp_resized = CreateCompatibleBitmap(hDC, bmp.bmWidth / 2, bmp.bmHeight / 2);

SelectObject(hDC, hbmp_resized);
SelectObject(hDC2, hbmp);

StretchBlt(hDC, 0, 0, bmp.bmWidth / 2, bmp.bmHeight / 2, hDC2, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);

SendMessage((GetDlgItem(hwnd, IDC_PHOTO)), BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)(HANDLE)(hbmp_resized));

....

L'image n'apparaît pas. Je pense que ça vient du SendMessage à la fin, ou je lui passe hbmp_resized comme dernier parametre...

Glipper
Commenter la réponse de glipper
glipper 246 Messages postés dimanche 2 juin 2002Date d'inscription 11 septembre 2016 Dernière intervention - 13 juil. 2006 à 11:38
0
Merci
Ok j'ai trouvé le probleme. il fallait faire ton code, et ensuite ne pas oublier de reselectionner l'objet par defaut :

hOldBmp2 = (HBITMAP) SelectObject(hDC3, hbmp_resized);
hOldBmp = (HBITMAP) SelectObject(hDC2, hbmp);

....SelectObject(hDC2, hOldBmp);
SelectObject(hDC3, hOldBmp2);

SendMessage((GetDlgItem(hwnd, IDC_PHOTO)), BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)(HANDLE)(hbmp_resized));

sinon, il n'apparait rien dans le bouton.

Merci beaucoup pour ton aide gagah1 tu m'as bien aidé.
Glipper
Commenter la réponse de glipper
gagah1 509 Messages postés samedi 28 juin 2003Date d'inscription 3 août 2010 Dernière intervention - 13 juil. 2006 à 15:14
0
Merci
N'oublie pas de supprimer les handles créés après le SendMessage(...):
DeleteDC(hDC2);
DeleteDC(hDC3);
ReleaseDC(hwnd, hDC);
DeleteObject(hbmp_resized);
Commenter la réponse de gagah1

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.