Bild von PictureBox speichern

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Montaxx.

    Bild von PictureBox speichern

    Hallo,

    versuche ich ein Bild aus einer Picturebox zu speichern, bekomme ich folgendes:



    Quellcode

    1. System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    2. bei Scanner.liefern.Speichern_Click(Object sender, EventArgs e) in C:\Users\cb.TOENS\Desktop\Dropbox\dev\VB .net\EP10\Scanner\liefern.vb:Zeile 55.
    3. bei System.Windows.Forms.Control.OnClick(EventArgs e)
    4. bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    5. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    6. bei System.Windows.Forms.Control.WndProc(Message& m)
    7. bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    8. bei System.Windows.Forms.Button.WndProc(Message& m)
    9. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    10. bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)



    Hier der gesammte Quellcode:

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Collections.Generic
    3. Imports System.ComponentModel
    4. Imports System.Data
    5. Imports System.Drawing
    6. Imports System.Text
    7. Imports System.Windows.Forms
    8. Imports System.Threading
    9. Imports System.Runtime.InteropServices
    10. Imports System.IO
    11. Public Class liefern
    12. Dim down = False
    13. 'Menüpunkt zum schließen
    14. Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
    15. Me.Close()
    16. End Sub
    17. 'Barcode im Textfeld wieder löschen
    18. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    19. Barcode.Text = ""
    20. Barcode.Focus()
    21. End Sub
    22. 'Malen Code
    23. Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
    24. down = True
    25. End Sub
    26. Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
    27. If down = True Then
    28. PictureBox1.CreateGraphics.FillEllipse(New SolidBrush(Color.FromArgb(100, 100, 100)), e.X, e.Y, 10, 10)
    29. End If
    30. End Sub
    31. Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
    32. down = False
    33. End Sub
    34. Private Sub Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Speichern.Click
    35. 'Checken ob Barcode gescannt wurde
    36. If Barcode.Text = "" Then
    37. MsgBox("Bitte erst Barcode Scannen", MsgBoxStyle.Critical)
    38. Else
    39. 'Erstellen der Textdatei mit Namen des Barcodes
    40. Dim Schreiben As New StreamWriter("barcodes\" + Barcode.Text + ".txt")
    41. 'Schreiben des Barcodes in die Datei
    42. Schreiben.Write(Barcode.Text)
    43. Schreiben.Close()
    44. Dim img As Image = Me.PictureBox1.Image
    45. img.Save(Barcode.Text + "*jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
    46. End If
    47. End Sub
    48. End Class




    Was ist da falsch ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Montaxx“ ()

    Die Formatierung deines Codes ist gaaaanz falsch - kann keiner lesen - wird keiner helfen.
    Btw: Option Strict ON

    Edit: Du zeichnest mit CreateGraphics - das kann nicht gespeichert werden. Schau dir mal mein GDI+ Tutorial an. Du musst auf ein Bild zeichnen. Nullreferenzexception bedeutet immer, dass etwas =nothing ist - vermutlich dein Bild weil nicht vorhanden. Option Strict ON! xD

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FreakJNS“ ()

    Willkommen im Forum. :thumbup:
    Wie hast Du denn der PictureBox das Bild zugewiesen?
    Teste das Image-Objekt ab:

    VB.NET-Quellcode

    1. If PictureBox1.Image IsNot Nothing Then
    2. ' speichern
    3. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    setz einen haltepunkt auf Zeile 55 und schau nach ob img = nothing ist. Wird wahrscheinlich so sein.
    Dann sieh dir mal mein GDI Tutorial an, denn zeug, dass du mit createGraphics zeichnest kannst du nicht speichern. Zeichne auf eine Bitmap/Image - nicht auf Controls.

    RodFromGermany schrieb:

    Wie hast Du denn der PictureBox das Bild zugewiesen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja - und dazu musst du auf ein Bild zeichnen.

    Dim bla as new bitmap(100,100)
    using gra as graphics = graphics.fromimage(bla)
    gra.drawiwas(...)
    end using

    und dieses Bild kannst du speichern - also bla.save(..)

    Schau doch einfach mal in das GDI+Tutorial rein oder lass dir hier nicht alles aus der nase ziehen xDD CreateGraphics IST hier komplett falsch.

    Montaxx schrieb:

    Also, das Programm soll bewirken,
    Ich denke, Du solltest Dich erst mal langsam an die Problematik ranarbeiten.
    Das ganze funktioniert mit GDI, und dafür reichen Deine Grundlagen noch lange nicht.
    Üb erst mal an kleineren Projekten das Programmieren einfacher Aufgaben. Sieh Dir mal dazu diesen Thread an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke Leute, hab's jetzt hinbekommen


    VB.NET-Quellcode

    1. Private Sub drawMyline()
    2. PictureBox1.Image = Drawbitmap
    3. Drawgraphics.DrawLine(myPen, xStart, yStart, xEnd, yEnd)
    4. End Sub
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. Drawbitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)
    7. Drawgraphics = Graphics.FromImage(Drawbitmap)
    8. PictureBox1.Image = Drawbitmap
    9. Drawgraphics.Clear(Color.White)
    10. xStart = -1
    11. yStart = -1
    12. Drawing = False
    13. myPenWidth = 4
    14. End Sub
    15. Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
    16. Drawing = True
    17. End Sub
    18. Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
    19. If Drawing Then
    20. xStart = e.X
    21. yStart = e.Y
    22. drawMyline()
    23. End If
    24. xEnd = e.X
    25. yEnd = e.Y
    26. End Sub
    27. Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
    28. Drawing = False
    29. End Sub