none
[Visual Studio 2008] Faire une "photo" d'une PictureBox RRS feed

  • Question

  • Bonjour,

    J'ai une PictureBox avec des contrôles Label et des Textbox

    Dans le corps du programme, je défini une variable Graphique, je dessine dans cette variable, et j'affecte cette variable à PictureBox.Image

     Si je récupère PictureBox.Image dans le presse papier, je n'obtiens que le dessin de la variable graphique

    Normal en somme …

     Mais alors, comment avoir l'image complète de la PictureBox, sa photo en somme, dans le presse papier ?

     Cordialement

    Sauveur CONSALVI


    SC

    vendredi 6 mai 2011 17:08

Réponses

  • Bonjour,

    en partant de la picturebox vous ne verrez pas les controles textbox et label car ceux ci ne sont pas contenus dans la picture box mais simplement au dessus.

    Une façon simple de faire serait d'ajouter un panel juste autour de votre picturebox : le panel contiendra la picturebox mais également les controles text et label.

    Pour obtenir un bitmap à partir du panel vous pouvez utiliser la méthode DrawToBitmap

    Cordialement

    mardi 10 mai 2011 21:13
    Modérateur
  • Bonjour M Ciprian DUDUIALA,

    Bingo ! C'est OK, c'est la solution !

    Je retrouve bien le graphe que je dessine et tous les contrôles que j'ai mit sur le panel

    Bravo

    Cordialement

    Sauveur CONSALVI


    SC
    vendredi 13 mai 2011 08:50

Toutes les réponses

  • Bon, j'ai trouvé une solution de contournement …

    Je fais une copie d'écran par la simulation de la touche "PRINT"

    Je récupère l'image qui a été mise dans le presse-papier

    Je "rogne" cette image

    Cordialement

    Sauveur CONSALVI


    SC
    dimanche 8 mai 2011 14:24
  • Bonjour,

     

    Imports System.IO
    
    Public Class Form1
      Dim crayon As Pen
      Dim image As Bitmap
      Dim pt_prec As Point
    
      Public Sub New()
    
        ' Cet appel est requis par le Concepteur Windows Form.
        InitializeComponent()
    
        ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
        crayon = New Pen(Color.Black)
        image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Dim gr As Graphics = Graphics.FromImage(image)
        gr.Clear(Color.White)
        gr.Dispose()
        PictureBox1.Image = image
      End Sub
    
      Private Sub HMouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseDown
        'Capture = deplacement de la souris
        pt_prec = New Point(e.X, e.Y)
      End Sub
    
      Private Sub HMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseMove
        'Capture = deplacement de la souris
        If PictureBox1.Capture Then
          Dim gr As Graphics = Graphics.FromImage(image)
          gr.DrawLine(crayon, pt_prec.X, pt_prec.Y, e.X, e.Y)
          gr.Dispose()
          pt_prec = New Point(e.X, e.Y)
          PictureBox1.Image = image
        End If
      End Sub
    
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Sauvegarde de l'image 
        Dim fs As FileStream = File.Create("tmp.jpg")
        PictureBox1.Image.Save(fs, Drawing.Imaging.ImageFormat.Jpeg)
        fs.Close()
    
        'Copie de l'image dans le clipboard
        Dim filePaths As New System.Collections.Specialized.StringCollection
        filePaths.Add(Directory.GetCurrentDirectory & "/tmp.jpg")
        Clipboard.SetFileDropList(filePaths)
      End Sub
    End Class
    
    


    Pj.
    mardi 10 mai 2011 14:09
  • Merci PJ

     

    C'est sympa de me proposer ce code

    Mais sauf erreur de ma part, il ne convient pas à mon problème

     

    Dans une image, je dessine un graphique

    J'affecte cette image à ma PICTUREBOX

    Dans cette PICTUREBOX j'ai des LABELS et des TEXTEBOX que je rempli suivant des calculs effectués

     

    Je voudrai récupérer dans le presse-papier non seulement l'image de la PICTUREBOX, mais aussi TOUS les LABELS et TEXTBOX que j'ai garnis

     

    Je crois que ton code ne récupère que l'image

     

    Cordialement

    Sauveur CONSALVI


    SC
    mardi 10 mai 2011 16:17
  • Bonjour,

    en partant de la picturebox vous ne verrez pas les controles textbox et label car ceux ci ne sont pas contenus dans la picture box mais simplement au dessus.

    Une façon simple de faire serait d'ajouter un panel juste autour de votre picturebox : le panel contiendra la picturebox mais également les controles text et label.

    Pour obtenir un bitmap à partir du panel vous pouvez utiliser la méthode DrawToBitmap

    Cordialement

    mardi 10 mai 2011 21:13
    Modérateur
  • Et bien voilà,

     

    Effectivement, je me demandais l'utilité de vouloir prendre une capture des labels donc je me suis dis que ce n'était pas ce que vous vouliez ;-)

     

    La solution de nikho semble alors pouvoir vous convenir.


    Pj.
    mercredi 11 mai 2011 07:36
  • Merci NIKHO

    Mais hélas, cela ne "marche pas". Je ne récupe pas les Label et TextBox ….

    Voici mon code (Panel1 est le Panel qui contient ma PictureBox avec les Label et TextBox)

     

    Dim bitmap As New Bitmap(Me.Panel1.Width, Me.Panel1.Height)

    Me.Panel1.DrawToBitmap(bitmap, New Rectangle(0, 0, Me.Panel1.Width, Me.Panel1.Height))

     

    Dans bitmap je n'ai que le dessin que j'ai fait dans la PictureBox

    Peut-être une erreur de code ?

    Cordialement

    Sauveur CONSALVI


    SC
    mercredi 11 mai 2011 08:51
  • Bonjour,

    Il semble qu’il y a un problème avec le contrôle PictureBox et les controles au-dessus le PictureBox ne sont pas visible dans l’image finale.

     

    Essayez à renoncer à votre PictureBox et affectez l’image initiale à votre BackgroundImage du Panel1 et puis utilisez la fonction Panel1.DrawToBitmap. J’ai teste cette solution et ça fonctionne.

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.


    jeudi 12 mai 2011 10:10
  • Merci M Ciprian Duduiala

    Bonjour,

    J'ai sans doute et même surement mal définit le cas, ne voulant pas "alourdir" la question.

    Ce n'est pas la copie de l'image qui pose problème, mais la constitution de cette image

    Je trace une courbe de poids, mais je ne peux tout faire par dessin

    J'ai des TextBox par exemple pour mettre le nom, prénom er âge de la personne

    Également des labels pour donner le poids … etcetera … 

    Je ne peux donc me passer de ces contrôles

    Et à part une copie d'écran, je ne voix pas de solution

    Cordialement

    Sauveur CONSALVI


    SC
    jeudi 12 mai 2011 15:14
  • Bonjour,

    Je crois que je me suis mal exprimé : je ne disais pas de renoncer à vos contrôles TextBox et Label. Je vous ai proposé à remplacer votre PictureBox par un Panel et utiliser la propriété BackgroundImage de ce Panel pour afficher l’image initiale et les controles restent au-dessus de votre Panel. Puis, avec la fonction Panel.DrawToBitmap vous allez obtenir l’image désirée.

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    vendredi 13 mai 2011 06:24
  • Bonjour M Ciprian DUDUIALA,

    Bingo ! C'est OK, c'est la solution !

    Je retrouve bien le graphe que je dessine et tous les contrôles que j'ai mit sur le panel

    Bravo

    Cordialement

    Sauveur CONSALVI


    SC
    vendredi 13 mai 2011 08:50