HBITMAP + resize

cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004 - 5 mai 2004 à 09:08
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004 - 8 mai 2004 à 13:54
Salut a tous,

voila, je voudrais faire une fonction, si elle n'existe pas deja,
a laquelle je passe un HBITMAP, une largeur et une hauteur,
et elle me renvoi un HBITMAP correspondant au redimenssionement demande. Alors j'ai essaye plein de choses,
j'ai tente de refaire moi meme le resize en travaillant directements sur le data de l'images, les BITS de l'images recuperer grace a GetDIBits, et ensuite de les reinjecte a une image ayant le meme header que la premiere en fesant un SetDIBits. Mais ca ne marche pas. J'ai tente aussi un StrechDiB mais la c'est pire.

En fait cette fonction va mettre util pour inserer dans un PictureBox, donc un Static avec le flag SS_BITMAP, une image qui se redimenssionne toute seul a la taille du controle, paske je n'ai pas trouver les flags permettant de definir que l'image passe avec STM_SETBITMAP soit redimenssioner a la taille du controle.

Si quelqu'un a une solution ca serait bien.

D'avance merci.

Rno

4 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 mai 2004 à 12:00
HBITMAP ResizeBmp(HBITMAP hBmpSrc, SIZE newSize)
{
// taille actuelle
BITMAP bmpInfo;
GetObject(hBmpSrc, sizeof(BITMAP), &bmpInfo);
SIZE oldSize;
oldSize.cx = bmpInfo.bmWidth;
oldSize.cy = bmpInfo.bmHeight;

// selection source ds un DC
HDC hdc = GetDC(NULL);
HDC hDCSrc = CreateCompatibleDC(hdc);
HBITMAP hOldBmpSrc = (HBITMAP)SelectObject(hDCSrc, hBmpSrc);

// création bitmap dest et sélection ds un DC
HDC hDCDst = CreateCompatibleDC(hdc);
HBITMAP hBmpDst = CreateCompatibleBitmap(hdc, newSize.cx, newSize.cy);
HBITMAP hOldBmpDst = (HBITMAP)SelectObject(hDCDst, hBmpDst);

// resize
StretchBlt(hDCDst, 0, 0, oldSize.cx, oldSize.cy, hDCSrc, 0, 0, newSize.cx, newSize.cy, SRCCOPY);

// libération ressources
SelectObject(hDCSrc, hOldBmpSrc);
SelectObject(hDCDst, hOldBmpDst);
DeleteDC(hDCSrc);
DeleteDC(hDCDst);
ReleaseDC(NULL, hdc);

return hBmpDst;
}
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
6 mai 2004 à 10:01
Rah la la, je vais tester ca. grand merci a toi. VRAIMENT GRAND MERCI.

Rno
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
6 mai 2004 à 10:47
petite erreur de ma part :

StretchBlt(hDCDst, 0, 0, newSize.cx, newSize.cy, hDCSrc, 0, 0, oldSize.cx, oldSize.cy, SRCCOPY);
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
8 mai 2004 à 13:54
oui je l'avais vu ... lol ... j'ai pas chercher longtemps mais je me suis pose des questions quand meme :-D J'ai rajouter aussi le setmode sur le Stretch pour eviter de denaturer l'image.

Encore grand merci a toi

Rno
0
Rejoignez-nous