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, 11454 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
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 6 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 12 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server24 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...