2017-04-11 3 views
0

So habe ich diesen Code:Speichern der Bild eines picturebox

Private Sub button28_Click(sender As Object, e As EventArgs) Handles button28.Click 
    Dim bounds As Rectangle 
    Dim screenshot As System.Drawing.Bitmap 
    Dim graph As Graphics 
    bounds = PicOuterBorder.Bounds 
    screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb) 
    graph = Graphics.FromImage(screenshot) 
    graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy) 
    picFinal.Image = screenshot 
    'this takes a screenshot 
End Sub 

PicOuterBorder ist ein picturebox auf meiner Form. PicFinal ist eine weitere Bildbox. Aber dieser Code bringt mir folgendes: ... Das ist im Grunde ein Screenshot eines Fensters in der Größe von PicOuterBorder, beginnend mit dem Ursprung meines Bildschirms. Allerdings funktioniert Me.Bounds anstelle von PicOuterBorder.Bounds und bekommt einen perfekten Screenshot von nur meiner Form. Ich möchte picFinal einen Screenshot haben, nur PicOuterBorder

Antwort

1

Try Code unten. Sie müssen die Kontrollkoordinaten unter Verwendung von PointToScreen auf Bildschirmkoordinaten abbilden. Ich habe PicOuterBorder in das Panel PanelPicture platziert. PanelPicture ist ohne Rahmen, während PicOuterBorder jede Art von Rahmenstil haben kann. Der folgende Code nimmt den Schnappschuss des Panels.

Private Sub button28_Click(sender As Object, e As EventArgs) Handles button28.Click 
    Dim graph As Graphics = Nothing 
    Dim bounds As Rectangle = Nothing 
    Dim screenshot As System.Drawing.Bitmap 

    Dim location As Drawing.Point = PanelPicture.PointToScreen(Drawing.Point.Empty) 
    screenshot = New System.Drawing.Bitmap(PanelPicture.Width, PanelPicture.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb) 
    graph = Graphics.FromImage(screenshot) 
    graph.CopyFromScreen(location.X, location.Y, 0, 0, PanelPicture.Size, CopyPixelOperation.SourceCopy) 
    picFinal.Image = screenshot 

    graph.Dispose() 
End Sub 
1

Passen Sie Ihren Code für so etwas wie folgt aus:

Public Sub SaveImage(filename As String, image As Image, Encoder As ImageCodecInfo, EncParam As EncoderParameter) 

Dim path As String = System.IO.Path.Combine(My.Application.Info.DirectoryPath, filename & ".jpg") 
Dim mySource As New Bitmap(image.Width, image.Height) 
Dim grfx As Graphics = Graphics.FromImage(mySource) 
grfx.DrawImageUnscaled(image, Point.Empty) 
grfx.Dispose() 
mySource.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg) 
mySource.Dispose() 

End Sub 
+0

Aber zuerst muss ich mich anpassen, um zu verstehen, was Sie gesagt haben. Bitte machen Sie eine Klarstellung. – TGamer

Verwandte Themen