Redimensionner image avec GDI+

Résolu
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022 - 25 mars 2009 à 17:47
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022 - 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.

6 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 avril 2009 à 08:47
voir, me semble
GdipSetSmoothingMode et SmoothingModeNone
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 mars 2009 à 08:30
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.
0
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022
5 avril 2009 à 22:43
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+ ?
0
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022
6 avril 2009 à 13:57
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é!!
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 avril 2009 à 14:33
ok, j'hésitait, atteint de flemme, je voulais pas maquetiser la solution :p
0
cs_youyou40 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 avril 2022
6 avril 2009 à 15:51
Y a pas de mal :-)

 GdipSetSmoothingMode gère l'anticrênelage.

Merci encore
0
Rejoignez-nous