Redimensionnement proportionnel d'une image (picturebox)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 952 fois - Téléchargée 19 fois

Contenu du snippet

Cette fonction est l'adaptation d'une fonction écrite en C# (dont je ne me souviens plus de la source)
Elle permet de redimensionner de façon proportionnelle une image en lui attribuant la largeur et la hauteur maximale de l'image à afficher.

Source / Exemple :


''' <summary>
    ''' Permet de redimensionner une image de façon proportionnelle 
    ''' </summary>
    ''' <param name="chemin">Chemin vers l'image</param>
    ''' <param name="Largeur">Largeur maximale</param>
    ''' <param name="Hauteur">Hauteur maximale</param>
    ''' <returns>Retourne l'image redimensionné</returns>
    Private Function redimImage(ByVal chemin As String, Optional ByVal Largeur As Integer = 160, Optional ByVal Hauteur As Integer = 200)
        Dim imageRedimensionne As Image

        'On détermine les largeur et hauteur maximales
        Dim largeurMax As Integer = Largeur
        Dim hauteurMax As Integer = Hauteur
        'Ratio à obtenir pour rentrer correctement notre image dans la PictureBox
        Dim ratio As Double = largeurMax / hauteurMax

        'On détermine l'image à traiter
        Dim imgSource As Image
        If chemin.Contains("http://") Then
            imgSource = Image.FromStream(client.OpenRead(chemin))
        Else
            imgSource = Image.FromFile(chemin)
        End If
        Dim imgHauteur As Double = imgSource.Height
        Dim imgLargeur As Double = imgSource.Width
        Dim imgRatio As Double = imgLargeur / imgHauteur

        If imgLargeur > largeurMax Or imgHauteur > hauteurMax Then
            'Si l'image est plus grande (largeur ou hauteur)
            If imgLargeur > largeurMax Then
                'Si la largeur est plus longue
                If 1 > imgRatio Then
                    'et si la hauteur est plus longue
                    imgHauteur = hauteurMax
                    If imgLargeur > imgSource.Height Then
                        'Si la largeur est plus grande que la hauteur d'origine
                        imgLargeur = imgHauteur / imgRatio
                    Else
                        'Si la largeur est moins grande ou égale à la hauteur d'origine
                        imgLargeur = imgHauteur * imgRatio
                    End If
                Else
                    'Si la hauteur est plus longue
                    imgLargeur = largeurMax
                    If imgHauteur > imgSource.Width Then
                        'Si la hauteur est plus grande que la largeur d'origine
                        imgHauteur = imgLargeur / imgRatio
                    Else
                        'Si la hauteur est moins grande ou égale à la largeur d'origine
                        imgHauteur = imgLargeur / imgRatio
                    End If
                End If
            Else
                'Si seule la largeur est plus longue
                imgHauteur = hauteurMax
                imgLargeur = imgHauteur * imgRatio
            End If
            'S'il y a eu un changement, on affiche notre nouvelle image
            imageRedimensionne = imgSource.GetThumbnailImage(Convert.ToInt32(imgLargeur), Convert.ToInt32(imgHauteur), Nothing, IntPtr.Zero)
        Else
            'Sinon, on affiche l'image d'origine
            imageRedimensionne = imgSource
        End If
        'On ferme notre image
        imgSource.Dispose()
        Return imageRedimensionne
    End Function

Conclusion :


Exemple d'utilisation :

' Affiche une image issue du web de largeur max = 200 pixels et longueur max = 200 pixels

PictureBox1.Image = redimImage("http://upload.wikimedia.org/wikipedia/commons/5/53/Shadow_2752.jpg",200,200)

A voir également

Ajouter un commentaire

Commentaires

Iragael
Messages postés
6
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
19 décembre 2013

Il y a beaucoup plus simple!!!
Format_Image_Source=Image_Source.Width/Image_Source.height
Format_PictureBox=Picturebox.Width/Picturebox.height
If Format_Image_Source>=Format_PictureBox Then
Echelle=Picturebox.Width/Image_Source.Width
Else
Echelle=Picturebox.height/Image_Source.height
End If
Image_Vignette = Image_Source.GetThumbnailImage(Image_Source.Width*Echelle,Image_Source.height*Echelle, Nothing, IntPtr.Zero)
Me.pictureBox.Image=Image_Vignette
à+
Merci quand-même! :-)
Clearness
Messages postés
11
Date d'inscription
vendredi 29 avril 2011
Statut
Membre
Dernière intervention
24 janvier 2012

@bidouille007 :
Effectivement, c'est une bonne idée à laquelle je n'avais pas pensé.
Je modifierais la source dans la semaine.
cs_bidouille007
Messages postés
257
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
22 décembre 2012
1
bonjour

je crois que tu aurais pu détecter par le chemin si l'image est sur le web ou en local.

Rien qu'en testant la présence ou pas au début du chemin si il y a ou non le fameux http

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.