Sauvegarde picture box + labels dans un seul JPG

quentinclone - 12 nov. 2012 à 18:11
 Utilisateur anonyme - 12 nov. 2012 à 22:19
Bonjour,
Mon programme me permet de générer une carte (en image). Cette "carte" est composée de labels et de picture box par dessus. J'aimerai savoir comment sauvegarder dans une seule image la picturebox de fond et tout ce qui se trouve dessus. J'ai une fonction qui me permet de le faire mais c'est du bricolage je trouve, c'est une capture d'écran tout simplement... Avez vous une autre méthode ?

PS : je me base pour la capture sur la librairie windows user 32 :
GetDesktopWindow Lib "user32" () As IntPtr

Ma capture d'écran se fait à partir du coin supérieur gauche de l'écran, et suivant des coordonnées précises, ce qui fait que lorsque je déplace ma fenêtre, bah ça marche plus

Merci d'avance !

Quentin

2 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
12 nov. 2012 à 18:22
Salut

peut etre ainsi

Private Function Capturectrl(ByVal ctrl As Control) As Bitmap
        Dim memoryImage As Bitmap
        Dim memoryGraphics As Graphics
        memoryImage = Nothing
        Dim mygraphics As Graphics = ctrl.CreateGraphics()
        Dim s As Size = ctrl.Size
        If TypeOf ctrl Is Form AndAlso DirectCast(ctrl, Form).FormBorderStyle <> FormBorderStyle.None Then
            memoryImage = New Bitmap(s.Width - 10, s.Height - (SystemInformation.FrameBorderSize.Width + 6 + SystemInformation.CaptionHeight), mygraphics)
            memoryGraphics = Graphics.FromImage(memoryImage)
            memoryGraphics.CopyFromScreen(0, (SystemInformation.FrameBorderSize.Width + 0 + SystemInformation.CaptionHeight), 0, 0, New Size(memoryImage.Width, memoryImage.Height), CopyPixelOperation.SourceCopy)
        Else
            memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
            memoryGraphics = Graphics.FromImage(memoryImage)
            memoryGraphics.CopyFromScreen(ctrl.Left, ctrl.Top, 0, 0, New Size(memoryImage.Width, memoryImage.Height), CopyPixelOperation.SourceCopy)
        End If
        Return memoryImage
    End Function 
'dans un bouton 
Private Sub ButtonSave_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ButtonSave.MouseClick
Dim saveimage As Bitmap
 saveimage = Capturectrl(me)
 saveimage.Save(pathfilename, ImageFormat.Jpeg)
end sub 
0
Utilisateur anonyme
12 nov. 2012 à 22:19
Bonsoir,

Encore plus facile en vb.net : http://www.codyx.org/snippet_capture-image-form-tous-controles_147.aspx
Y'a juste à remplacer la Form par la PictureBox.

_____________
Kenji
0
Rejoignez-nous