Redimensionnement image et qualité

Résolu
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 19 mars 2006 à 06:26
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 19 mars 2006 à 22:54
Bonjour



j'utilise la fonction ci-dessous (copiee sur ce forum) pour redimensionner des bitmaps

sauf que dans le cas de la reduction, l'image est de mauvaise qualité (apparition de points, ligne...)

comment ameliorer la qualité ?



merci





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, newSize.cx, newSize.cy, hDCSrc, 0, 0, oldSize.cx, oldSize.cy, SRCCOPY);



// libération ressources

SelectObject(hDCSrc, hOldBmpSrc);

SelectObject(hDCDst, hOldBmpDst);

DeleteDC(hDCSrc);

DeleteDC(hDCDst);

ReleaseDC(NULL, hdc);



return hBmpDst;

}

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mars 2006 à 10:21
Avant le StretchBlt:
SetStretchBltMode(hDCDst, STRETCH_HALFTONE);

Ta libération des ressources n'est pas duffisante, il faut aussi supprimer les bitmaps:
DeleteObject(SelectObject(hDCSrc, hOldBmpSrc));
DeleteObject(SelectObject(hDCDst, hOldBmpDst));

C'est plus important de les libérer que les HDC car elle prennent beaucoup plus de mémoire
3
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
19 mars 2006 à 10:46
merci, ca fonctionne sans pb :-)



et merci pour la memoire

j'oublie souvent d'en liberer

faut que j'y pense +
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mars 2006 à 10:49
Pour vérifier si tu n'oublies rien: gestionnaire des tâches
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
19 mars 2006 à 22:52
pas trés précis le gestionnaire des taches ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mars 2006 à 22:54
Si, tu peux connaitre le nombre d'objets GDI alloués par un processus
0
Rejoignez-nous