Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Visual Basic 2008 in PictureBox zeichnen wie in Paint mit Stift

Mitglied: 69304

69304 (Level 1)

08.02.2010 um 11:36 Uhr, 12169 Aufrufe, 7 Kommentare

Hallo!

Für ein Projekt brauche ich eine Möglichkeit, in eine PictureBox o.ä. zeichnen zu können wie in Paint mit dem Stift-Werkzeug.

Es geht darum, dass eine Unterschrift "digitalisiert" werden kann. Ferner soll per Grafiktablett unterschrieben werden können. Das Image soll dann als BMP, etc. nachher weiter verarbeitet werden können.

Ich habe schon sowas was ich brauche im Netz gerfunden, bloß ist dies zu langsam.

Hat hier jemand eine Idee, oder Vorschlag?


Mein Code, den ich bis jetzt verwende, der aber zu langsam ist..:

01.
Public Class frmUnterschrift
02.

03.
    Dim xStart, yStart, xEnd, yEnd As Integer
04.
    Dim Drawbitmap As Bitmap
05.
    Dim Drawgraphics As Graphics
06.
    Dim myPen As New Pen(Color.BlueViolet, 3)
07.
    Dim myColor As Color = Color.Black
08.
    Dim myBrush As New Drawing.SolidBrush(Color.Black)
09.
    Dim myBrushWidth As Integer
10.
    Dim ContinuousFlag As Boolean
11.

12.
    Private Sub drawMyline()
13.
        PictureBox1.Image = Drawbitmap
14.
        Drawgraphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
15.
        Drawgraphics.DrawLine(myPen, xStart, yStart, xEnd, yEnd)
16.
    End Sub
17.

18.
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
19.
        Drawbitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)
20.
        Drawgraphics = Graphics.FromImage(Drawbitmap)
21.
        PictureBox1.Image = Drawbitmap
22.
        Drawgraphics.Clear(Color.White)
23.
        myBrushWidth = 4
24.
    End Sub
25.

26.
    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
27.
        xStart = Control.MousePosition.X - (Me.Left + PictureBox1.Left + 4)
28.
        yStart = Control.MousePosition.Y - (Me.Top + PictureBox1.Top + 31)
29.
        'to do continuous drawing, enable this line 
30.
        'drawMyline()
31.
        If RadioButton1.Checked = True Then
32.
            ContinuousFlag = True
33.
        End If
34.
    End Sub
35.

36.
    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
37.
        If ContinuousFlag Then
38.
            Drawgraphics.SmoothingMode = Drawing2D.SmoothingMode.None
39.
            Drawgraphics.FillEllipse(myBrush, e.X, e.Y, myBrushWidth, myBrushWidth)
40.
            PictureBox1.Image = Drawbitmap
41.
        End If
42.
    End Sub
43.

44.
    Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
45.
        xEnd = Control.MousePosition.X - (Me.Left + PictureBox1.Left + 4)
46.
        yEnd = Control.MousePosition.Y - (Me.Top + PictureBox1.Top + 31)
47.

48.
        If RadioButton1.Checked Then
49.
            ContinuousFlag = False
50.
        Else
51.
            drawMyline()
52.
        End If
53.
    End Sub
54.

55.
End Class
Mitglied: MonoTone
09.02.2010 um 17:11 Uhr
HI rbrixel

Hier mal ein C&P Code von mir aus Internet schnipseln.
Du brauchst PictureBox1, Combobox1 + 2.
Kannst ja aber selber nach deinen belieben ändern bzw siehst ja eh.

01.
Public Class Form1
02.
    Private MouseD As Boolean
03.
    Private Col As Color
04.
    Private NewPen As Pen
05.
    Private bmp As Bitmap
06.
    Private Plist As List(Of Point)
07.
    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
08.
        MouseD = True
09.
        Plist.Add(New Point(e.X, e.Y))
10.
        NewPen = New Pen(Col, CSng(ComboBox2.SelectedItem))
11.
    End Sub
12.
    Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
13.
        If MouseD Then
14.
            MouseD = False
15.
            Using gr = Graphics.FromImage(bmp)
16.

17.
                Draw(gr)
18.
                gr.Flush()
19.
            End Using
20.
            Plist.Clear()
21.
            PictureBox1.Invalidate()
22.
        End If
23.
    End Sub
24.
    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
25.
        If MouseD Then
26.
            Plist.Add(New Point(e.X, e.Y))
27.
            PictureBox1.Invalidate()
28.
        End If
29.
    End Sub
30.
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
31.
        If MouseD Then Draw(e.Graphics)
32.
    End Sub
33.
   
34.
    Private Sub Draw(ByVal g As Graphics)
35.
        If Plist.Count > 0 Then
36.
            Dim bs As Byte() = New Byte(Plist.Count - 1) {}
37.
            bs(0) = CByte(System.Drawing.Drawing2D.PathPointType.Start)
38.
            For a = 1 To Plist.Count - 1
39.
                bs(a) = CByte(System.Drawing.Drawing2D.PathPointType.Line)
40.
                g.DrawPath(NewPen, New System.Drawing.Drawing2D.GraphicsPath(Plist.ToArray, bs))
41.
            Next
42.
        End If
43.
    End Sub
44.

45.
    Private Function GetColors() As List(Of String)
46.
        Dim colors As New List(Of String)()
47.
        Dim colorNames As String() = [Enum].GetNames(GetType(KnownColor))
48.
        For Each colorName As String In colorNames
49.
            Dim knownColor As KnownColor = DirectCast([Enum].Parse(GetType(KnownColor), colorName), KnownColor)
50.
            If knownColor > knownColor.Transparent Then
51.
                colors.Add(colorName)
52.
            End If
53.
        Next
54.
        Return colors
55.
    End Function
56.
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
57.
        PictureBox1.BackColor = Color.White
58.
        bmp = New Bitmap(PictureBox1.Width, PictureBox1.Height)
59.
        PictureBox1.Image = bmp
60.
        Plist = New List(Of Point)
61.
        Me.DoubleBuffered = True
62.
        For Each c As String In GetColors()
63.
            ComboBox1.Items.Add(c)
64.
        Next
65.
        For a = 1 To 25
66.
            ComboBox2.Items.Add(a.ToString)
67.
        Next
68.
        ComboBox1.SelectedItem = ComboBox1.Items(0)
69.
        ComboBox2.SelectedItem = ComboBox2.Items(0)
70.
    End Sub
71.
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
72.
        Col = Color.FromName(ComboBox1.SelectedItem)
73.
    End Sub
74.
   
75.
End Class
gruss Mono
Bitte warten ..
Mitglied: 69304
09.02.2010 um 22:00 Uhr
Funktioniert wunderbar!!!

Danke Mono!

Habs bissl abgeändert und läuft supi!
Bitte warten ..
Mitglied: 69304
10.02.2010 um 09:17 Uhr
Jetzt ist mir aber gerade aufgefallen, als ich das Bild mit image.save speichern will, bekommen ich nur ein schwarzes BMP.

Hat hier jmd noch eine Lösung, dass das Bild richtig abgespeichert wird?
Bitte warten ..
Mitglied: 69304
16.02.2010 um 00:28 Uhr
Hallo!

Hab das Problem weiter einkreisen können ^^

Wenn ich das Image so abspeicher...

01.
bmp.Save("D:\test_neu.bmp", Imaging.ImageFormat.Bmp)
... bekomme ich einfach ein schwarzes Bitmap.

Wenn ich aber die Pen-Color auf Weiss und den Background auf Black stelle, bekomme ich auch ein solches Bild.

Wie könnte ich den Hintergrund weiss einfärben, weil...

01.
PictureBox1.BackColor = Color.White
... bringts ned...
Bitte warten ..
Mitglied: MonoTone
17.02.2010 um 10:48 Uhr
probier mal:

01.
Dim img As Image = Image.FromHbitmap(CType(Me.PictureBox1.Image, _
02.
              Bitmap).GetHbitmap)
03.
img.save("C:myPic.png") 'oder als bmp/jpg mit Imaging.imageformat.bmp/jpeg etc
bin grad auch ein bissi ratlos, so geht es aber zumindest halbwegs... ich such mal ob ich noch eine bessere lösung finde
hab ne bessere:

füge im load event ein:

01.
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
02.
        bmp = New Bitmap(PictureBox1.Width, PictureBox1.Height)
03.
        Using gr as Graphics = Graphics.FromImage(bmp)
04.
            gr.Clear(Color.White) 'das ist der Punkt
05.
        End Using
06.
        PictureBox1.Image = bmp
07.
        Plist = New List(Of Point)
08.
        Me.DoubleBuffered = True
09.
'..
10.
end sub
11.
Private Sub Savebutton_click '..
12.
bmp.Save("C:\MyPic.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
13.
end sub

So sollte es gehen.

Gruss mono
Bitte warten ..
Mitglied: 69304
17.02.2010 um 10:59 Uhr
Ich habe festgestellt, dass der Background einfach "leer" ist.

Wenn ich z.B. den Hintergrund aus einem Bitmap vorlade mit...

01.
Try
02.
            bmp = Image.FromFile(PROGRAMMPFAD & "\bg.bmp")
03.
            PictureBox1.Image = bmp
04.
            Plist = New List(Of Point)
05.
            Me.DoubleBuffered = True
06.
        Catch ex As Exception
07.
            FehlerMeldung("Hintergrund fehlt! " & ex.Message, True)
08.

09.
        End Try
...bekomme ich ein korrektes Image beim speichern.

Wenn ich deinen Vorlag übernehme, Monotone, dann sieht das Bild total hässlich mit einem blauen Hintergrund aus.
Bitte warten ..
Mitglied: 69304
17.02.2010 um 11:12 Uhr
OK, ich habs ;)

01.
Public Function NeuesBild() As Boolean
02.
        Try
03.
            bmp = New Bitmap(PictureBox1.Width, PictureBox1.Height)
04.
            Using gr = Graphics.FromImage(bmp) ' Hintergrund weiss füllen
05.
                gr.FillRectangle(Brushes.White, 0, 0, PictureBox1.Width, PictureBox1.Height)
06.
            End Using
07.

08.
            PictureBox1.Image = bmp
09.

10.
            Plist = New List(Of Point)
11.
            Me.DoubleBuffered = True
12.
            Return True
13.
        Catch ex As Exception
14.
            MsgBox("Hintergrund fehlt! " & ex.Message)
15.
            Return False
16.
        End Try
17.
End Function
Diese Funktion kann dann beim Form-Load ausgeführt werden!

01.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
02.
        NeuesBild()
03.
End Sub

Danke an Monotone!
Bitte warten ..
Ähnliche Inhalte
Visual Studio
Visual basic - Fenstergröße
gelöst Frage von Cougar77Visual Studio4 Kommentare

Hallo, ich habe ein kleines Programm geschrieben - visual studio 2015, visual basic. Soweit funktioniert das auch sehr gut, ...

Visual Studio
Visual Basic für anfänger
gelöst Frage von Daoudi1973Visual Studio12 Kommentare

ich möchte Visual Basic lernen, kann jemand mir Tipps geben. PS: ich habe nur im 1999 mit Fortran 90 ...

VB for Applications
Visual Basic Checkbox drucken?
gelöst Frage von GERz0cKErZVB for Applications10 Kommentare

Hallo, ich habe ein Programm wo man mehrere checkboxen anklicken kann. Der Text der checkboxen soll am Ende gedruckt ...

Visual Studio
Bewegtes Label Visual Basic
gelöst Frage von Cougar77Visual Studio1 Kommentar

Guten Abend, ich versuche mich grade ein bisschen an VB. An sich würde ich gerne ein beliebiges Element (Label, ...

Neue Wissensbeiträge
Windows 10

"Windows 10 Pro V1903: Gruppenrichtlinie "Telemetrie zulassen" aktivierbar?"

Tipp von Snowbird vor 4 StundenWindows 101 Kommentar

Sicherheits-Tools

TrendMicro Worry-Free Business Security 10.0 SP1 - Jetzt in Deutsch verfügbar! (Windows 10 1903 Support)

Tipp von TrinXx vor 1 TagSicherheits-Tools1 Kommentar

Moin! Nach wochenlangem Warten wird Trend Micro das SP1 für WFBS 10 voraussichtlich am 26.08.19 veröffentlichen. Ich habe das ...

Hyper-V
Setup VM W2016 startet nicht in Hyper-V 2016
Erfahrungsbericht von keine-ahnung vor 2 TagenHyper-V7 Kommentare

Moin, sitze gerade über meinem neuen Server und versuche, die VM auf den Host zu prügeln. Jetzt wollte ich ...

Server-Hardware

HPE Proliant ML350P Gen8 Probleme mit Zugriff auf Raid-Volumes

Erfahrungsbericht von goscho vor 3 TagenServer-Hardware1 Kommentar

Hallo Leute, das Problemgerät: HPE ML350P G8 Windows Server 2012R2 HyperV-Host 8 x 300 GB 10K SAS HDD (1 ...

Heiß diskutierte Inhalte
Server
Ein Server ins Haus stellen. Was brauche ich dafür?
Frage von JoschiTomServer13 Kommentare

Hallo Community, ich spiele mit dem Gedanken eine Server mir zu holen. Was brauche ich dafür? Und wie sind ...

Windows Server
Ist es möglich, eine deutsche W2016 Installation mit einer UK-Lizenz zu aktivieren?
gelöst Frage von keine-ahnungWindows Server10 Kommentare

Moin at all, ist ja noch Freitag. Ich habe hier noch zwei UK OEM W2016 Standard Pakete rumfliegen Muss ...

Batch & Shell
Mittels SED Text ersetzen in Anführungszeichen
gelöst Frage von nekronBatch & Shell9 Kommentare

Moin … bin nicht wirklich der SED/regex Mensch, vielleicht kann mir jemand auf die Schnelle Helfen :) ich habe ...

LAN, WAN, Wireless
Mikrotik Gast-Wlan keine Verbindung zum Internet?
Frage von dirkschwarzLAN, WAN, Wireless8 Kommentare

Guten Morgen, habe ein wahrscheinlich einfaches Problem, bei dem ich aber nicht wirklich weiter komme Ich möchte ein Gast-Wlan ...