IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] Redimensionner une image dans un PictureBox


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut [VB.NET] Redimensionner une image dans un PictureBox
    bonjour
    quelqu'un connaitrai t'il la syntaxe pour donner a l'image dans ma picturebox1 la taille de 250*200
    j'ai trouver sur le forum en C# mais impossible de le faire en VB.net

    donc soit redimensionner la taille de l'image soit la taille de la picturebox et en utilisant la fonction autosize pour que l'image prenne cette taille
    merci d'avance a tous

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    regarde du coté de la méthode: GetThumbnailImage

    sinon, si ta picture box, fait deja 250*200, tu mets la propriété correspondante : stretch (je crois)

    dans les deux cas, si tu ne travailles pas sur ton image avant de la mettre dans la picturebox, tu vas obtenir un ratio différent donc une image déformée selon l'image d'origine
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    non cest fonction ne va pas pour mon utilisation car cela pixelise beaucoup quand l'image est de grande taille ou alors je m'y prend mal

    donc je voudrais pouvoir modifier la taille un peu comme en c# ou l'on fait :

    picturebox1.image = new size(250,200)

    mais en vb.net je n'arrive pas a le faire je pense qu'il me manque la bonne syntaxe
    merci d'avance a tous

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    attention.
    1 si tu fais Getthumbnail 250*200 tu va avoir une image compressée de 250*200 (pixelisée comme tu dis)
    2 si tu fais new Size(250,200), ca refait une image 250 *200 soit exactement la meme chose
    3 si tu la meme dans ta picture box, et que tu la met à strech, tu auras ton image gardant sa taille d'origine (en memoire si l'on peut dire) mais affichée 250*200 soit toujours le meme affichage.

    prend photoshop et reduit une photo, tu auras le meme effet. pixelisé, ca l'est un peu car comme je te l'ai dit tu ne garde pas le meme ratio.
    1,3333 pour une image 1024*768
    1,25 pour une image 250*200

    il faut la retravailler et faire des calculs pour qu'elle tienne dans ta picturebox sans etre deformée.cad, qu'elle prendra soit toute la hauteur, soit toute la longueur, mais une partie sera vide pour ne pas perdre de qualité.


    voici le code C# d'une fonction que j'ai faite justement pour ne pas perdre de qualité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #region Fonction pour afficher l'image au bon format
    private void ResizeImage(string path)
    {
      // réglages des valeurs servant au calcul
      int Lmax = IMG.Width;
      // IMG est le nom de ma pictureBox
      int Hmax = IMG.Height;
     
      Image i = Image.FromFile(path); 
      // objet image à partir de l'image choisie
      double ratio = (double) Lmax / Hmax;
      // ratio de base à obtenir pour rentrer correctement dans la picturebox
      double ratioImage = (double) i.Width / i.Height;
      // ratio de l'image d'origine
      double Flng = i.Width;
      // largeur de l'image d'origine
      double Fht = i.Height;
      // hauteur de l'image d'origine
      if (Flng > Lmax || Fht > Hmax)
      // si l'image est plus grande d'une quelconque longueur
      {
        if (Flng > Lmax) // si la longueur est plus longue
        {
          if (1 > ratioImage) // et si la largueur est plus longue
          {
          Fht = Hmax; // la hauteur prend la hauteur maximale
          if (Flng > i.Height)Flng = Fht / ratioImage; // calcul de la longueur 
          else Flng = Fht * ratioImage; // calcul de la longueur (bis)
          }
        else // seule la largeur est plus longue
    {
    Flng = Lmax; // la largeur prend la largeur maximale
    if (Fht > i.Width) Fht = Flng / ratioImage; // calcul de la hauteur
    else Fht = Flng / ratioImage;
    }
    }
    else // seule la largeur est plus longue
    {
    Fht = Hmax;
    Flng = Fht * ratioImage;
    }
    IMG.Image = Image.FromFile(path).GetThumbnailImage(Convert.ToInt32
    (Flng),Convert.ToInt32(Fht),null, IntPtr.Zero); // j'en tire une miniature
    }
    else IMG.Image = Image.FromFile(path); // sinon j'affiche l'image de base
      }
    #endregion
    et comme tu vois, il faut faire plein de calcul pour obtenir une vrai miniature rentrant dans la picture box.
    en espérant que ca puisse t'aider
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    merci cest cool de mavoir donner ta fonction
    en faite la fonction je l'avai deja ce qui me manquait cetait pouvoir modifier ma picture de taille
    donc maintenant je genere la taille voulu pour que cela soit proportionnel et je l'applique a ma picture en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    picturebox1.size = new size (200,300)
    merci pour ton aide j'espere pouvoir t'aider a mon tour
    bye

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par pharaonix
    attention.
    1 si tu fais Getthumbnail 250*200 tu va avoir une image compressée de 250*200 (pixelisée comme tu dis)
    2 si tu fais new Size(250,200), ca refait une image 250 *200 soit exactement la meme chose
    3 si tu la meme dans ta picture box, et que tu la met à strech, tu auras ton image gardant sa taille d'origine (en memoire si l'on peut dire) mais affichée 250*200 soit toujours le meme affichage.

    prend photoshop et reduit une photo, tu auras le meme effet. pixelisé, ca l'est un peu car comme je te l'ai dit tu ne garde pas le meme ratio.
    1,3333 pour une image 1024*768
    1,25 pour une image 250*200

    il faut la retravailler et faire des calculs pour qu'elle tienne dans ta picturebox sans etre deformée.cad, qu'elle prendra soit toute la hauteur, soit toute la longueur, mais une partie sera vide pour ne pas perdre de qualité.


    voici le code C# d'une fonction que j'ai faite justement pour ne pas perdre de qualité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #region Fonction pour afficher l'image au bon format
    private void ResizeImage(string path)
    {
      // réglages des valeurs servant au calcul
      int Lmax = IMG.Width;
      // IMG est le nom de ma pictureBox
      int Hmax = IMG.Height;
     
      Image i = Image.FromFile(path);
      // objet image à partir de l'image choisie
      double ratio = (double) Lmax / Hmax;
      // ratio de base à obtenir pour rentrer correctement dans la picturebox
      double ratioImage = (double) i.Width / i.Height;
      // ratio de l'image d'origine
      double Flng = i.Width;
      // largeur de l'image d'origine
      double Fht = i.Height;
      // hauteur de l'image d'origine
      if (Flng > Lmax || Fht > Hmax)
      // si l'image est plus grande d'une quelconque longueur
      {
        if (Flng > Lmax) // si la longueur est plus longue
        {
          if (1 > ratioImage) // et si la largueur est plus longue
          {
          Fht = Hmax; // la hauteur prend la hauteur maximale
          if (Flng > i.Height)Flng = Fht / ratioImage; // calcul de la longueur 
          else Flng = Fht * ratioImage; // calcul de la longueur (bis)
          }
        else // seule la largeur est plus longue
    {
    Flng = Lmax; // la largeur prend la largeur maximale
    if (Fht > i.Width) Fht = Flng / ratioImage; // calcul de la hauteur
    else Fht = Flng / ratioImage;
    }
    }
    else // seule la largeur est plus longue
    {
    Fht = Hmax;
    Flng = Fht * ratioImage;
    }
    IMG.Image = Image.FromFile(path).GetThumbnailImage(Convert.ToInt32
    (Flng),Convert.ToInt32(Fht),null, IntPtr.Zero); // j'en tire une miniature
    }
    else IMG.Image = Image.FromFile(path); // sinon j'affiche l'image de base
      }
    #endregion
    et comme tu vois, il faut faire plein de calcul pour obtenir une vrai miniature rentrant dans la picture box.
    en espérant que ca puisse t'aider
    Il n'y aurai pas un pb dans ton code, si on regait l'indentation, il manque un elseif ou un if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #region Fonction pour afficher l'image au bon format
            private void ResizeImage(string path)
            {
                // réglages des valeurs servant au calcul
                int Lmax = IMG.Width;
                // IMG est le nom de ma pictureBox
                int Hmax = IMG.Height;
     
                Image i = Image.FromFile(path);
                // objet image à partir de l'image choisie
                double ratio = (double) Lmax / Hmax;
         // ratio de base à obtenir pour rentrer correctement dans la picturebox
                double ratioImage = (double) i.Width / i.Height;
        // ratio de l'image d'origine
                double Flng = i.Width;
        // largeur de l'image d'origine
                double Fht = i.Height;
       // hauteur de l'image d'origine
                if (Flng > Lmax || Fht > Hmax) 
      // si l'image est plus grande d'une quelconque longueur
                {
                    if (Flng > Lmax) // si la longueur est plus longue
                    {
                        if (1 > ratioImage) // et si la largueur est plus longue
                        {
                            Fht = Hmax; // la hauteur prend la hauteur maximale
                            if (Flng > i.Height)Flng = Fht / ratioImage;
     // calcul de la longueur
                            else Flng = Fht * ratioImage;
     // calcul de la longueur (bis)
                        }
                        else // seule la largeur est plus longue
                        {
                            Flng = Lmax; // la largeur prend la largeur maximale
                            if (Fht > i.Width) Fht = Flng / ratioImage;
     // calcul de la hauteur
                            else Fht = Flng / ratioImage;
                        }
                }
                else // seule la largeur est plus longue
                {
                    Fht = Hmax;
                    Flng = Fht * ratioImage;
                }
                IMG.Image = Image.FromFile(path).GetThumbnailImage
    (Convert.ToInt32(Flng),Convert.ToInt32(Fht),null, IntPtr.Zero);
     // j'en tire une miniature
                }
                else IMG.Image = Image.FromFile(path);
     // sinon j'affiche l'image de base
            }
            #endregion

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bonjour
    J'utilise votre méthode pour redimensionner mon image.
    Mais j'ai un gros problème de résolution.
    Les images qui s'affichent dans le PictureBox sont réellement moches!
    Peut-on améliorer cela, ou existe-t-il une autre méthode pour faire un "aperçu d'image" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.PBImage.Image = i.GetThumbnailImage(width, height, Nothing, IntPtr.Zero)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redimensionner une image dans un picturebox
    Par callo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2009, 17h20
  2. Comment améliorer la rotation à 45° d'une image dans un PictureBox
    Par ProgElecT dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 22/07/2006, 01h05
  3. [VB.NET] incorporer une image dans un exe
    Par joefou dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/12/2005, 10h36
  4. Redimensionner une image dans une popup
    Par 12_darte_12 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/10/2005, 16h52
  5. [VB.NET] Redimensionner une image proportionnelement
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/10/2004, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo