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 :

Zoomer multiple Image/PictureBox


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut Zoomer multiple Image/PictureBox
    Bonsoir,

    J'ai un petit probleme de zoom et je ne sais pas par quel bout le prendre.
    Je voudrais zoomer plusieurs Images en meme temps: par exemple 2 images (normalement contenu dans des PictureBox), une image utilisee comme Background et une image ajoutee par dessus.

    Je peux zoomer une Image dans une PictureBox (DockStyle.Fill) sur une Form. Mais, si j'ajoute une image dynamiquement sur la premiere image, cela se complique.
    Je ne vois pas comment m'y prendre. En ecrivant cette question, je me demande si je devrais utiliser un support autre que PictureBox (Panel par exemple) et zoomer ce support avec les PictureBox (contenant l'Image complete), si toutefois c'est possible. Car on ne peut pas mettre plusieurs images dans un PictureBox.
    Une autre idee serait peut-etre de zoomer tous les controles (pictureBox) en meme temps. Mais ... bref je ne sais pas trop comment faire!

    J'espere avoir ete clair avec ma question.
    Il est vrai que je recherche plus une idee, une facon de travailler que du code.
    Mais, si vous avez quelque bout de code pour me montrer le chemin a suivre, je suis preneur.
    Toute idee est la bienvenue.

    Merci,
    JLuc01

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    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 202
    Par défaut
    zoomer selon quoi ?
    juste zoomer à l'affichage ou c'est l'utilisateur qui peut zoomer à différent niveaux de zoom ?

    en windows forms il n'y a rien pour zoomer des controles, et encore moins pour le faire proprement
    par contre on peut se coder un zoom d'image avec la fonction drawimage

    en wpf il y a un controle dédié qui permet le zoom de tout ce qui est à l'intérieur de celui ci (y compris le texte)

    windows forms est le framework graphique historique de .net, wpf est apparu en 2008, il est beaucoup plus puissant mais très différent à appréhender
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Comme dit par Pol63,les controls winforms ne sont pas "scalables",neamoins dessiner un Bitmap "bmp scale" dans l'event Paint est possible sans alterer le contenu du bitmap "bmpBack " assigne à la prop PictureBox.Image...

    Le bitmap dessine dans l'event Paint est scale grace au class Rectangle et centre .....

    exemple code avec un picturebox et 2 images:
    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
    54
    55
    56
     
    Imports System.Drawing.Drawing2D
     
    Public Class Form1
     
        Private bmpBack As Bitmap
        Private bmpFront As Bitmap
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            'bitmap de background inalterable
            bmpBack = My.Resources.img1
            bmpBack = New Bitmap(bmpBack, 200, 200) ' on resize le bitmap background convenablement
     
            PictureBox1.Image = bmpBack ' on l'assigne à Image
            PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
     
            'bitmap de front scalable et dessine dans event Paint
            bmpFront = My.Resources.img2
            bmpFront = New Bitmap(bmpFront, 200, 200) ' on resize le bitmap scalable convenablement
     
            'rect 
            rectScale = New RectangleF(0, 0, 200, 200)
     
        End Sub
     
        Private increment As Single = 2.5
        Private rectScale As RectangleF
        Private Sub Form1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseWheel
            If e.Delta = 120 Then
     
                rectScale.Inflate(increment, increment)
                rectScale.Width = Math.Min(rectScale.Width, 400) 'taille max souhaite
                rectScale.Height = Math.Min(rectScale.Height, 400)
            ElseIf e.Delta = -120 Then
                rectScale.Inflate(-increment, -increment)
                rectScale.Width = Math.Max(rectScale.Width, 50) 'taille min souhaite
                rectScale.Height = Math.Max(rectScale.Height, 50)
     
            End If
     
            PictureBox1.Invalidate()
     
     
     
        End Sub
     
        Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
            Dim gr As Graphics = e.Graphics
            Dim m As New Matrix
     
            gr.DrawImage(bmpFront, rectScale.X, rectScale.Y, rectScale.Width, rectScale.Height)
     
     
        End Sub
    End Class
    Rien n'empeche d'ajouter d'autres bmpFront et de les dessiner dans l'Event Paint (appel à PictureBox.Invalidate) ce qui fait une superposition de "calques"....Evidement il faut mettre les bmpFront dans ce cas dans un List(Of Bitmap) pour pouvoir les reorganiser....
    bon code...

  4. #4
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut
    Bonjour,

    Tout d'abord, merci pour les reponses instructives.

    Pol63: zoomer a l'aide de la souris.
    WPF serait peut-etre une solution plus simple, mais je ne l'ai jamais utilise.

    En fait, ce que j'ai fait jusqu'a maintenant, c'est un zoom d'une image dans un picturebox (picturebox avec dockstyle.fill dans un panel) que j'utilise comme image de fond sur le panel. Je zoome cette image de fond avec la souris, donc je peux voir sur le panel une partie de cette image remplissant tout le picturebox ou bien toute l'image sur un fond colore vert (propriete background du picturebox = green) dependant du zoom.
    Bref, le meme principe que le bout de code de Mabrouki. Les bouts de code de Mabrouki sont generalement tres instructif pour moi dans le forum.

    Maintenant, je voudrais ajouter dynamiquement une autre (ou plusieurs) image (via un picturebox) sur ce background, et quand je zoome avec la souris etre capable de zoomer l'ensemble. Ajout a l'aide d'un bouton.
    Bon, il y aura aussi le probleme du pointer qui peut se trouver sur une picturebox ajoute dynamiquement, donc zoom pas possible, mais je ne suis pas encore arrive a ce probleme., donc oublions pour maintenant.

    Bref, je pensais que si les images ajoutees (avec la propriete Stretch) se trouvent sur mon image de fond, je serait capable de changer la taille et la position de ces images en meme temps que l'image de fond. Avec un For Each sur les controles PicturesBox (excepte l'image de fond qui fonctionne differement).
    Mais, apres la remarque de Pol63, j'ai des doutes sur la faisabilite.

    Si vous avez d'autres remarques, elles seront bienvenues.
    Merci,

    A+
    JLuc01

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    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 202
    Par défaut
    tu peux très bien arriver à ce que tu veux en windows forms, et il y a même plusieurs moyens de faire ca

    tu peux par exemple superposer l'image de fond et l'image du dessus au sein d'une seule image, et c'est cette image finale que tu affiches, comme ca quand tu zoomes les 2 sont zoomées
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut
    En fait, je ne veux pas "merger" les images, car je veux pouvoir les bouger individuellement avec la souris si necessaire (sauf l'image de fond).
    Mais, je pense avoir quelques idees maintenant, je dois juste les tester.
    Par exemple a chaque fois que je change le parametre Zoom, j'applique une procedure qui s'occuperas des autres picturebox.
    Procedure a mettre a la fin de cette sub "Private Sub DrawImage(ByRef g As Graphics)".

    Merci.
    JLuc01

+ 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. Mouvement image picturebox à la souris
    Par Lnmex dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/03/2009, 12h30
  3. Image - PictureBox : affichage LENT
    Par johan3240 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/06/2008, 10h50
  4. zoomer une image
    Par benoit70 dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2008, 14h22
  5. positionnement multiple images
    Par thierryG dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 12/07/2006, 14h41

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