Hi Liebe Com,
ich habe mit ein paar Recherchen im Netz ein kleinen Paint Clon geschrieben. Funktionen sind lediglich zeichnen mit einem Stift in allen Farben und Dicken.
Ich denke als Ansatz wie man zeichnet OHNE das bei schnellen Mausbewegungen Lücken entstehen, kann man den Code gebrauchen.
Man braucht 1 Form(PaintForm) 1 Picturebox(PBDraw) 3 ComboBoxen(CBPenWidth,CBPenColor,CBPBBGColor)
Am besten die PB oben andocken und unten die 3 Comboboxen hin:
//Edit
Neu: 2 Buttons: SaveButton & ClearButton
Man kann sauber zeichnen ohne Ruckeln, ohne fehlende Pixel bei schnellen Mausemoves etc.
Ich denke dies ist SourceCodewürdig, da oft die Frage kommt, wie mach ich ein Paint Clone. Hier ist nun ein Ansatz zu finden, wie man sowas selber coden kann.
Über Kritiken würde ich mich sehr freuen
Gruss Mono :)
*EDIT*
Ich habe eine Save Button hinzugefügt.
ACHTUNG
Wenn man die Hintergrundfarbe ändert wird das Bild gelöscht.
Ich weiß grad keine Lösung wie man den HG des bitmaps komplett ändert, ohne den Vordergrund zu löschen.
*EDIT* 30.04.2010
Ich habe nun eine 2. Ebene als Hintergrund eingebaut. damit kann man nun den Hintergrund ändern ohne den Vordergrund zu löschen.
Ausserdem einen weiteren Button Namens ClearButton.
Damit kann man das komplette Bild löschen.
// Hat denn keiner weitere Kritiken daran ?
Was könnte denn besser gemacht werden etc.. wo optimieren ? ^^
Oder schaut es sich bloß keiner von den Pro's an
Wie auch immer. Vll hilfts ja dem einen oder anderen Anfänger.
Gruß Mono
//EDIT
For a Zu FOR A AS INTEGER geändert..
ich habe mit ein paar Recherchen im Netz ein kleinen Paint Clon geschrieben. Funktionen sind lediglich zeichnen mit einem Stift in allen Farben und Dicken.
Ich denke als Ansatz wie man zeichnet OHNE das bei schnellen Mausbewegungen Lücken entstehen, kann man den Code gebrauchen.
Man braucht 1 Form(PaintForm) 1 Picturebox(PBDraw) 3 ComboBoxen(CBPenWidth,CBPenColor,CBPBBGColor)
Am besten die PB oben andocken und unten die 3 Comboboxen hin:
//Edit
Neu: 2 Buttons: SaveButton & ClearButton
VB.NET-Quellcode
- Public Class PaintForm
- Private MouseD As Boolean
- Private Col As Color
- Private NewPen As Pen
- Private bmp As Bitmap
- Private Plist As List(Of Point)
- Private HG_Bmp As Bitmap
- Private Sub PBDraw_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PBDraw.MouseDown
- MouseD = True
- Plist.Add(New Point(e.X, e.Y))
- End Sub
- Private Sub PBDraw_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PBDraw.MouseUp
- If MouseD Then
- MouseD = False
- Using gr = Graphics.FromImage(bmp)
- Draw(gr)
- gr.Flush()
- End Using
- Using gr = Graphics.FromImage(HG_Bmp)
- gr.DrawImage(bmp, 0, 0)
- gr.Flush()
- End Using
- Plist.Clear()
- PBDraw.Invalidate()
- End If
- End Sub
- Private Sub PBDraw_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PBDraw.MouseMove
- If MouseD Then
- Plist.Add(New Point(e.X, e.Y))
- PBDraw.Invalidate()
- End If
- End Sub
- Private Sub PBDraw_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PBDraw.Paint
- If MouseD Then Draw(e.Graphics)
- End Sub
- Private Sub Draw(ByVal g As Graphics)
- If Plist.Count > 0 Then
- Dim bs As Byte() = New Byte(Plist.Count - 1) {}
- bs(0) = CByte(System.Drawing.Drawing2D.PathPointType.Start)
- For a as Integer = 1 To Plist.Count - 1
- bs(a) = CByte(System.Drawing.Drawing2D.PathPointType.Line)
- g.DrawPath(NewPen, New System.Drawing.Drawing2D.GraphicsPath(Plist.ToArray, bs))
- Next
- End If
- End Sub
- Private Function GetColors() As List(Of String)
- Dim colors As New List(Of String)()
- Dim colorNames As String() = [Enum].GetNames(GetType(KnownColor))
- For Each colorName As String In colorNames
- Dim knownColor As KnownColor = DirectCast([Enum].Parse(GetType(KnownColor), colorName), KnownColor)
- If knownColor > knownColor.Transparent Then
- colors.Add(colorName)
- End If
- Next
- Return colors
- End Function
- Private Sub PainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- HG_Bmp = New Bitmap(PBDraw.Width, PBDraw.Height)
- bmp = New Bitmap(PBDraw.Width, PBDraw.Height)
- Using gr As Graphics = Graphics.FromImage(bmp)
- gr.Clear(Color.Transparent)
- PBDraw.Invalidate()
- End Using
- Using gr As Graphics = Graphics.FromImage(HG_Bmp)
- gr.Clear(Color.White)
- gr.DrawImage(bmp, 0, 0)
- PBDraw.Invalidate()
- End Using
- PBDraw.Image = HG_Bmp
- Plist = New List(Of Point)
- Me.DoubleBuffered = True
- For Each c As String In GetColors()
- CBPenColor.Items.Add(c)
- CBPBBGColor.Items.Add(c)
- Next
- For a as Integer = 1 To 25
- CBPenWidth.Items.Add(a.ToString)
- Next
- CBPenColor.SelectedItem = CBPenColor.Items(0)
- CBPenWidth.SelectedItem = CBPenWidth.Items(0)
- End Sub
- Private Sub CBPenColor_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBPenColor.SelectedIndexChanged, CBPenWidth.SelectedIndexChanged
- NewPen = New Pen(Color.FromName(CBPenColor.SelectedItem), CSng(CBPenWidth.SelectedItem))
- End Sub
- Private Sub CBPBBGColor_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBPBBGColor.SelectedIndexChanged
- Using gr As Graphics = Graphics.FromImage(HG_Bmp)
- gr.Clear(Color.FromName(CBPBBGColor.SelectedItem))
- gr.DrawImage(bmp, 0, 0)
- PBDraw.Invalidate()
- End Using
- End Sub
- Private Sub SaveButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveButton.Click
- Dim sfd As New SaveFileDialog
- sfd.Filter = ".jpg|*.jpg"
- sfd.AddExtension = True
- If sfd.ShowDialog = Windows.Forms.DialogResult.OK Then
- HG_Bmp.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)
- End If
- End Sub
- Private Sub ClearButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClearButton.Click
- Using gr As Graphics = Graphics.FromImage(bmp)
- gr.Clear(Color.Transparent)
- PBDraw.Invalidate()
- End Using
- Using gr As Graphics = Graphics.FromImage(HG_Bmp)
- gr.Clear(Color.White)
- gr.DrawImage(bmp, 0, 0)
- PBDraw.Invalidate()
- End Using
- End Sub
- End Class
Man kann sauber zeichnen ohne Ruckeln, ohne fehlende Pixel bei schnellen Mausemoves etc.
Ich denke dies ist SourceCodewürdig, da oft die Frage kommt, wie mach ich ein Paint Clone. Hier ist nun ein Ansatz zu finden, wie man sowas selber coden kann.
Über Kritiken würde ich mich sehr freuen
Gruss Mono :)
*EDIT*
Ich habe eine Save Button hinzugefügt.
ACHTUNG
Wenn man die Hintergrundfarbe ändert wird das Bild gelöscht.
Ich weiß grad keine Lösung wie man den HG des bitmaps komplett ändert, ohne den Vordergrund zu löschen.
*EDIT* 30.04.2010
Ich habe nun eine 2. Ebene als Hintergrund eingebaut. damit kann man nun den Hintergrund ändern ohne den Vordergrund zu löschen.
Ausserdem einen weiteren Button Namens ClearButton.
Damit kann man das komplette Bild löschen.
// Hat denn keiner weitere Kritiken daran ?
Was könnte denn besser gemacht werden etc.. wo optimieren ? ^^
Oder schaut es sich bloß keiner von den Pro's an
Wie auch immer. Vll hilfts ja dem einen oder anderen Anfänger.
Gruß Mono
//EDIT
For a Zu FOR A AS INTEGER geändert..
Das ist meine Signatur und sie wird wunderbar sein!
Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „Mono“ ()