Redimensionner image avec GDI+ [Résolu]

cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 25 mars 2009 à 17:47 - Dernière réponse : cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention
- 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 

6 réponses

Répondre au sujet
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 6 avril 2009 à 08:47
+3
Utile
voir, me semble
GdipSetSmoothingMode et SmoothingModeNone
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 26 mars 2009 à 08:30
0
Utile
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
cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 5 avril 2009 à 22:43
0
Utile
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
cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 6 avril 2009 à 13:57
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 6 avril 2009 à 14:33
0
Utile
ok, j'hésitait, atteint de flemme, je voulais pas maquetiser la solution :p
Commenter la réponse de Renfield
cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 6 avril 2009 à 15:51
0
Utile
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.