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

C# Discussion :

Zoom in/out d'une pictureBox


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 104
    Par défaut Zoom in/out d'une pictureBox
    Bonjour à tous,

    Je pilote une caméra et dans mon Form j'ai donc trois boutons d'acquisition : capture photo, capture vidéo et stop de la capture vidéo.
    L'image capturée a une résolution de 2048 px * 2048 px, donc pour pouvoir visualiser la capture entièrement dans ma fenêtre, sans devoir utiliser les " ascenseurs ", j'ai placé deux boutons de zoom in/out.
    Voici mon code pour ces deux boutons :

    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
     
            private Size Multiplier;
            private Color color = Color.Black;
     
            public void ZoomIn()
            {
                Multiplier = new Size(2, 2);
     
                Image MyImage = pictureBox.Image;
     
                Bitmap MyBitMap = new Bitmap(MyImage, Convert.ToInt32(MyImage.Width * Multiplier.Width),
                Convert.ToInt32(MyImage.Height * Multiplier.Height));
     
                Graphics Graphic = Graphics.FromImage(MyBitMap);
     
                Graphic.InterpolationMode = InterpolationMode.High;
     
                pictureBox.Image = MyBitMap;
                pictureBox.Refresh();
     
            }
     
            public void ZoomOut()
            {
                Multiplier = new Size(2, 2);
     
                Image MyImage = pictureBox.Image;
     
                Bitmap MyBitMap = new Bitmap(MyImage, Convert.ToInt32(MyImage.Width / Multiplier.Width),
                Convert.ToInt32(MyImage.Height / Multiplier.Height));
     
                Graphics Graphic = Graphics.FromImage(MyBitMap);
     
                Graphic.InterpolationMode = InterpolationMode.High;
     
                pictureBox.Image = MyBitMap;
                pictureBox.Refresh();
            }
     
     
            private void button1_Click(object sender, EventArgs e)
            {
                ZoomIn();
                pictureBox.Invalidate();
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                ZoomOut();
                pictureBox.Invalidate();
            }
    Le zoom in/out fonctionne mais j'ai un petit problème. Une fois que j'ai appuyé sur l'un des deux boutons de zoom, je ne peux plus lancer une capture directement. Il faut d'abord que je ferme mon application et que je la lance à nouveau.

    Quelqu'un aurait une idée de mon problème ?

    Avec ce zoom, la photo devient pixélisée si on zoom in/out trop de fois, mais dans mon cas ce n'est pas si grave.

    Merci d'avance,

    Sebbur

  2. #2
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Par défaut
    Bonjour,

    Pourquoi vous faites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pictureBox.Invalidate()
    ?

    J'ai des doutes que ça soit ça la cause du problème!

    Pouvez-vous essayer


  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 104
    Par défaut
    J'avais déjà essayé les deux méthodes, mais le problème persiste. Je ne vois pas trop comment résoudre ce problème alors je suis venu sur le forum pour avoir de l'aide

    Sebbur

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Par défaut
    avez-vous fait referch() au début de la capture?

    Merci!

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Bonjour

    comme je l'ai déjà dit, il faut créer un controle héritant de la pictureBox et faire les choses proprement dans le OnPaint() surchargé
    de ce controle comme ça, tu controleras tout directement et proprement !

    Et du coup, tu pourras utiliser une matrice de zoom pour faire ce que tu veux, voir redimensionner les images !!!

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 104
    Par défaut
    Salut,

    Donc il faut que je crée un UserControl qui hérite de la pictureBox ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 104
    Par défaut
    Citation Envoyé par samuel44 Voir le message
    avez-vous fait referch() au début de la capture?

    Merci!
    Non je n'ai pas fait de Refresh() dans l'évènement du bouton qui permet de lancer la capture.

    Sebbur

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    invalidate et refresh font la même chose (l'un appelle l'autre)
    mais setter l'image (comme pictureBox.Image = MyBitMap) appelle invalidate
    ca te fait déjà quelques lignes à supprimer

    par contre comment captures tu l'image, c'est de là qu'il faudrait partir
    et c'est juste l'image que tu veux zoomer ou la vidéo aussi ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Zoom et Scroll sur une PictureBox avec BackgroundImage
    Par Khoral dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/10/2009, 15h18
  2. Rendre le fond transparent dans une picturebox
    Par fun31 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/01/2005, 18h17
  3. [C#] Problème avec une PictureBox
    Par david71 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/01/2005, 16h59
  4. VB6] imprimer le texte afficher dans une picturebox
    Par Persons dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/08/2004, 11h15
  5. Effet Fade In / Fade Out sur une surface DirectDraw
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 08/09/2002, 17h37

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