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 :

Capturer un form long dans une image


Sujet :

Windows Forms

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

    Informations forums :
    Inscription : Août 2007
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Capturer un form long dans une image
    Bonjour,


    je cherche à enregistrer un formulaire dans une image.jpg. Jusqu'a présent j'ai réussi à trouver des sources réalisant une capture d'écran de mon form. Le pb, cest que ce dernier est bien plus haut que l'écran et possède donc une barre de scroll verticale: ainsi avec ces méthodes, je n'arrive qu'à capturer la zone du haut, présente à l'écran.

    Existe t-il une méthode simple qui me permettrait de capturer l'ensemble de mon formulaire, y compris la zone qui n'est actuellement pas affichée à l'écran?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    me.invokepaint sur un graphics fromimage puis save peut etre
    (dans le pire des cas un for each ctrl in me.controls récursif)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

    Informations forums :
    Inscription : Août 2007
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    oula,



    est ce que tu pourrais être un peu plus clair stp?
    Ce que j'ai fait pour l'instant, cest creer des labels invisibles tout le long de mon form, et en leur donnant successivement le focus, j'arrive a faire plusieurs captures d'écran de tout le form.
    Le pb, cest que justement j'obtiens plusieurs captures et que j'aimerais au final une seule grande image...

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    il y a en effet plein de chose pour faire une capture simple, mais avec le scrollbar je n'ai rien trouvé de simple

    j'ai quand meme trouvé une parade, à savoir que si ton form à une image de fond il manque une ligne qui la dessine sur le buffer avant d'appeler la sub récursive

    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
     
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.VerticalScroll.Value = 0
            Dim img As New Bitmap(Me.Width, Me.VerticalScroll.Maximum, Imaging.PixelFormat.Format32bppArgb)
            Dim g As Graphics = Graphics.FromImage(img)
            Dim buffer As BufferedGraphics = BufferedGraphicsManager.Current.Allocate(g, New System.Drawing.Rectangle(0, 0, Me.Width, Me.VerticalScroll.Maximum))
     
            buffer.Graphics.Clear(Me.BackColor)
            DessineCtrl(Me, buffer)
     
            buffer.Render(g)
            img.Save("c:\img.png", Imaging.ImageFormat.Png)
        End Sub
     
        Private Sub DessineCtrl(ByVal ctrldepart As Control, ByVal buffertotal As BufferedGraphics)
            For Each ctrl As Control In ctrldepart.Controls
                Dim imgCtrl As New Bitmap(ctrl.Width, ctrl.Height, Imaging.PixelFormat.Format32bppArgb)
                Dim g As Graphics = Graphics.FromImage(imgCtrl)
                Dim b As BufferedGraphics = BufferedGraphicsManager.Current.Allocate(g, New System.Drawing.Rectangle(0, 0, ctrl.Width, ctrl.Height))
     
     
                Dim p As New PaintEventArgs(b.Graphics, New System.Drawing.Rectangle(ctrl.Left, ctrl.Top, ctrl.Width, ctrl.Height))
                Me.InvokePaintBackground(ctrl, p)
                Me.InvokePaint(ctrl, p)
                b.Render(g)
     
                buffertotal.Graphics.DrawImage(imgCtrl, ctrl.Left, ctrl.Top)
     
                DessineCtrl(ctrl, buffertotal)
            Next
        End Sub
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Détéction de formes circulaires dans une image
    Par shalymar dans le forum OpenCV
    Réponses: 4
    Dernier message: 18/04/2015, 18h18
  2. Localisation d'une forme parabolique dans une image binaire
    Par AYDIWALID dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 24/11/2011, 17h33
  3. Détection de forme géométriques dans une image
    Par imeneeeee dans le forum Images
    Réponses: 9
    Dernier message: 19/01/2010, 10h39
  4. Réponses: 1
    Dernier message: 02/11/2006, 10h25
  5. [Forms builder] Load une image dans un item image
    Par loupin dans le forum Forms
    Réponses: 2
    Dernier message: 18/09/2006, 11h45

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