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

Frage Entwicklung Visual Studio

Mitglied: 69304

69304 (Level 1)

08.02.2010 um 11:36 Uhr, 11367 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 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
Bitcoin-Miner mit Visual Basic ?
Frage von Aicher1998Visual Studio2 Kommentare

Hallo, kennt jemand einen Ansatz, wie ich mit Visual Basic Bitcoins mine? Ich würde auch auf eine Python-DLL zurückgreifen ...

Visual Studio
Pastebin auslesen mit Visual Basic?
gelöst Frage von UltraZzVisual Studio2 Kommentare

Hey,ich würde gerne wissen wie man (z.B. für ein Passwort welches man immer wieder ändern kann,ohne das Programm zu ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 55 MinutenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 1 StundeMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 9 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...