Redimensionner image avec GDI+ [Résolu]

Messages postés
58
Date d'inscription
lundi 20 décembre 2004
Dernière intervention
3 janvier 2017
- - Dernière réponse : cs_youyou40
Messages postés
58
Date d'inscription
lundi 20 décembre 2004
Dernière intervention
3 janvier 2017
- 6 avril 2009 à 15:51
Bonjour à tous

Je voudrais afficher une image dans un PictureBox  et la redimensionner pour quelle s'adapte à la taille du PictureBox (par exemple 140x140 pixels).
Je voudrais pouvoir utiliser entre autres des images PNG  (pour travailler par exemple sur des icones avec transparence) , donc je me suis touné vers GDI+ et la fonction GdipDrawImageRectRectI pour dessiner l'image dans le PictureBox , en mettant comme dimension de destination la largeur et la hauteur de ce PictureBox.

Cela fonctionne, très bien lorsque l'image est plus grande que le PictureBox : elle est bien redimensionnée.
Par contre, si l'image d'origine est plus petite que le PictureBox, elle est redimensionnée  à la bonne taille par GdipDrawImageRectRectI, mais pas comme je voudrais. Par exemple un petit png de 14x14 pixels sera agrandi une dizaine de fois et apparaitra tout flou (interpolation, c'est ça ??).
Je voudrais obtenir la même iumage plus grande (sans interpolation, c'est ça ?) comme le fait la méthode stretch du contrôle Image par exemple.

Je débute, surtout avec GDI+, excusez-moi si la question est mal posée....

Merci d'avance.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3
Merci
voir, me semble
GdipSetSmoothingMode et SmoothingModeNone

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
tu ne poruras pas éviter cette pixelisation... pas avec des fichiers de type bitmap, comme le PNG...

te faudrait des fichier vectoriels, pour y parvenir.
Commenter la réponse de Renfield
Messages postés
58
Date d'inscription
lundi 20 décembre 2004
Dernière intervention
3 janvier 2017
0
Merci
Bonjour

Merci Renfield pour cette réponse rapide ... désolé pour mon retard à te répondre...

En fait ce que je voudrais faire avec GDI+, un simple contrôle image le fait avec sa propriété Stretch.
Si je charge une petite image de 14x20 pixels par exemple dans une picturebox plus grande, l'image sera affichée "grandeur nature" mais si je positionne Stretch sur True, l'image sera agrandie pour occuper toute la picturebox et on verra alors très distinctement les 14 pixels , bien carrés, sur la largeur et les 20 pixels bien carrés sur la hauteur.
C'est ce que je voudrais faire avec GDI+, mais la fonction GdipDrawImageRectRectI n'agrandit pas l'image de départ de la même façon : im n'y a pas pixellisation, au contraire, GDI+ s'arrange pour qu'on ne voit pas les pixels et cela donne un aspect flou à l'image de départ.

Dans l'exemple ci-dessous (les contrôles image et picturebox ont les mêms dimensions ) :
- à gauche ,l'icone dans un contrôle image avec stretch=false
- au milieu,,l'icone dans un contrôle image avec stretch=true
- à droite l'image dans une picturebox avec GDI+ et GdipDrawImageRectRectI ,  j'ai mis en dimensions de destination, les dimensions de la picturebox.

Je voudrais que mon prog fonctionne avec des png, donc je veux utiliser GDI+, on ne peut pas obtenir un agrandissement comme celui du milieu avec GDI+ ?
Commenter la réponse de cs_youyou40
Messages postés
58
Date d'inscription
lundi 20 décembre 2004
Dernière intervention
3 janvier 2017
0
Merci
Encore une fois merci beaucoup Renfield.

La fonction que tu indiques ne corrige pas le problème mais j'ai suivi ton idée et j'ai trouvé la fonction GdipSetInterpolationMode qui ,elle, permet de choisir le type d'interpolation.
Le type InterpolationModeNearestNeighbor correspond exactement à ce que je cherche !!

Merci encore pour ta rapidité et ton efficacité!!
Commenter la réponse de cs_youyou40
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
ok, j'hésitait, atteint de flemme, je voulais pas maquetiser la solution :p
Commenter la réponse de Renfield
Messages postés
58
Date d'inscription
lundi 20 décembre 2004
Dernière intervention
3 janvier 2017
0
Merci
Y a pas de mal :-)

 GdipSetSmoothingMode gère l'anticrênelage.

Merci encore
Commenter la réponse de cs_youyou40

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.