onPaint-Event: Zeichnung als Bitmap speichern

02/08/2010 - 20:03 von Wolfgang Badura | Report spam
Einen schönen guten Abend!

Gibt es eine einfache Möglichkeit, das, was im Paint-Event des Formulares
gerade gezeichnet wurde, vor Ende des Sub in einer Bitmap
zwischenzuspeichern?

Ich kenne mich leider beim Verfertigen vom Grafiken noch nicht wirklich aus.

Danke in Voraus für Hinweise.

Wolfgang
 

Lesen sie die antworten

#1 Armin Zingler
02/08/2010 - 20:30 | Warnen spam
Am 02.08.2010 20:03, schrieb Wolfgang Badura:
Einen schönen guten Abend!

Gibt es eine einfache Möglichkeit, das, was im Paint-Event des Formulares
gerade gezeichnet wurde, vor Ende des Sub in einer Bitmap
zwischenzuspeichern?

Ich kenne mich leider beim Verfertigen vom Grafiken noch nicht wirklich aus.



Zeichne nicht auf der Form sondern direkt auf einer Bitmap und zeige stattdessen
die Bitmap in der Form an.

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles Me.Paint

Using bmp As New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)
Using g = Graphics.FromImage(bmp)
g.FillRectangle(Brushes.White, 20, 30, 40, 50)
End Using

e.Graphics.DrawImageUnscaled(bmp, 0, 0)

bmp.Save("pfad", Drawing.Imaging.ImageFormat.Bmp)
End Using

End Sub


Optimieren làsst sich das, wenn du die Bitmap nur einmal erzeugst:

Public Class Form1

Dim bmp As Bitmap

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles Me.Paint

If bmp Is Nothing Then
bmp = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)
End If

Using g = Graphics.FromImage(bmp)
g.FillRectangle(Brushes.White, 20, 30, 40, 50)
End Using

e.Graphics.DrawImageUnscaled(bmp, 0, 0)

bmp.Save("pfad", Drawing.Imaging.ImageFormat.Bmp)

End Sub

Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize

bmp = Nothing

End Sub

End Class

Zusàtzlich solltest du die Bitmap in der Dispose-Methode auch disposen.
Die Methode findest du in der Designer-Datei (Form1.Designer.vb):

if bmp isnot nothing then
bmp.Dispose
bmp = nothing
end if


Armin

Ähnliche fragen