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

VB.NET Discussion :

Picturebox, zoomer sans flouter


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut Picturebox, zoomer sans flouter
    Bonjour,
    je souhaite afficher une petite image (11x13 px) dans une picturebox, en utilisant la propriété SizeMode sur Zoom afin que l'image soit agrandie. Mon problème est que l'image est retravaillée par la picturebox, comme optimisée, ce qui provoque un flou.
    Je cherche comment éviter ce flou, avoir l'image agrandie mais en conservant son aspect.
    Cette image n'est pas un fichier, c'est un screenshot, la fonction faisant office de loupe.

    Merci pour toute réponse.
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  2. #2
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour, je ne suis pas sûr de bien comprendre quel résultat tu espérais. Si ton image fait 11pixels de large et que ta picturebox en fait 27 par exemple, comment espérais-tu que les 27 valeurs soient calculées ? Par défaut la PictureBox procéde sans doute à une interpolation linéaire ou cubique, qui est le choix le plus raisonnable. Mais toi, que veux-tu ? Du nearest neighbor ? Du 2x SAI ?

  3. #3
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut
    moi je cherche un simple zoom, sans interpolation ni quoi ou qu'est-ce, de la même façon que sous paint si tu zoom sur une image, paint ne fait rien d'autre que d'afficher les pixels plus gros.
    Si mon image fait 11 et la picturebox 27, alors chaque pixel sera dessiner sur 2, et 5 pixels ne seront pas utilisés et répartis de part et d'autre (ce que fait déjà la picturebox si la taille de l'image ne correspond pas à la taille de l'objet)
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    En fait, ça n'existe pas "un simple zoom", en numérique tu dois forcément passer par un procédé de rééchantillonage. Apparemment ce que tu veux c'est un procédé dit de "nearest neighbor". Voici comment générer une image agrandie à partir de ton image source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var resizedBmp = new Bitmap(pictureBox.Width, pictureBox.Height;
    using (var g = Graphics.FromImage(resizedBmp ))
    {
        g.InterpolationMode = InterpolationMode.NearestNeighbor;
        g.DrawImage(bmp, new Rectangle(Point.Empty, resizedBmp.Size));
        g.Flush();
    }
    pictureBox.Image = resizedBmp;
    Fais attention à choisir pour ta picturebox une taille qui soit un multiple de l'image source sinon le résultat semblera incorrect avec un filtre nearest neighbor sur une image aussi petite.

  5. #5
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut
    malheureusement, la taille de mon image est variable c'est pourquoi la propriété zoom était bien
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  6. #6
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Ça c'est un détail, ce n'est vraiment pas compliqué à régler, tu n'as qu'à utiliser un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int widthFactor = pictureBox.Width / bmp.Width;
    int heightFactor = pictureBox.Height / bmp.Height;
    int factor = Math.Min(widthFactor, heightFactor);

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

Discussions similaires

  1. [Débutant] Zoomer Une image dans un picturebox
    Par Audrey43 dans le forum VB.NET
    Réponses: 5
    Dernier message: 06/03/2012, 18h38
  2. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  3. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  4. [Kylix] Fiches sans bordure
    Par alex dans le forum EDI
    Réponses: 4
    Dernier message: 28/04/2002, 21h19

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