Bild aus PictureBox speichern

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Bild aus PictureBox speichern

    Hi,
    brauch eure Hilfe mal, kapier das mit dem Bild abspeichern nicht...

    Lade mit Hilfe des Openfiledialog ein Bild in eine PictureBox - das funktioniert!

    nun möchte ich dieses Bild, was sich in der PB befindet speichern- in eine Datenbank, wo ich als das Datenbankfeld als OLE-Objekt gekennzeichnet habe - soweit richtig ?

    Habe nun aber das Problem, das ich einfach nicht verstehe, wie ich dieses Bild speichern kann.

    so speichere ich meine Felder sonst:

    VB.NET-Quellcode

    1. Dim con As New OleDb.OleDbConnection
    2. Dim cmd As New OleDb.OleDbCommand
    3. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Form1.Archiv_aktiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    4. cmd.Connection = con
    5. cmd.CommandText = "INSERT into meine_artikel ("Hauptbezeichnung", "Lagerort",... ) VALUE ("'" & tb_hauptbezeichnung "'" & .......)


    Wie ich hier beim speichern das Bild speichern soll, ist mir ein rätsel...


    Und das auslesen bereitet mir auch noch Probleme...
    Habe es mal versucht "manuell" ein Bild in der Access (mdb) Datenbank zu speichern und über mein Programm, siehe Code unten auszulesen...
    Fehlermeldung "Ungültiger Parameter"

    der Code zum aulesen:

    VB.NET-Quellcode

    1. ' Bild einfügen
    2. Dim imageBytes As Byte() = DirectCast(reader("P_Bild"), Byte())
    3. Dim ms As New MemoryStream()
    4. ms.Write(imageBytes, 0, imageBytes.Length)
    5. Dim bmp As New Bitmap(ms)
    6. pb1.Image = Image.FromStream(ms)



    Hoffe Ihr könnt mir dabei helfen...

    Vielen Dank vorab!

    Lg lris
    warum denn immer so kompliziert wenns auch einfach geht...

    VB.NET-Quellcode

    1. pb1.image.save


    edit:

    fail, das passiert wenn man nur auf den titel achtet..
    warum speicherst du nicht einfach mal mit microsoft access ein bild ab, öffnest die gespeicherte datei in notepad++ o.ä. und schaust dir an wies aufgebaut ist?
    Habe es nun umgestellt - danke erst mal für eure versuchte Hilfe :)

    Werde das Bild nun in einem Verzeichnis speichern, funktioniert schon mal ...

    Aber was nicht funktioniert ist das einlesen... da bleibt das Bild einfach nur leer und auch keine Fehlermeldung...

    Könnt Ihr mir sagen was daran falsch ist???

    Das speichern funktioniert...

    VB.NET-Quellcode

    1. Private Sub Bild_DIMS_speichern(ByVal PNR As String)
    2. Try
    3. If (pb1 IsNot Nothing) Then
    4. Dim BildAlsDateiPfad As String = Form1.Archiv_Pfad & _
    5. "\FILES_" & Form1.Archiv_Name & "\FILES\Pers_SECRET\" & PNR & "."
    6. Dim bm As Bitmap = pb1.Image
    7. bm.Save(BildAlsDateiPfad & "jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
    8. End If
    9. Catch ex As Exception
    10. MessageBox.Show("Bild konnte nicht gespeichert werden...", "DIMS Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Error)
    11. End Try
    12. End Sub


    Das einlesen - funktioniert irgendwie nicht und weis nicht warum ...

    VB.NET-Quellcode

    1. Private Sub Bild_DIMS_laden(ByVal BNR As String)
    2. Dim BildAlsDateiPfad As String = Form1.Archiv_Pfad & _
    3. "\FILES_" & Form1.Archiv_Name & "\FILES\Pers_SECRET\" & BNR & ".jpg"
    4. If File.Exists(BildAlsDateiPfad) Then
    5. Me.pb1.Image = New System.Drawing.Bitmap(BildAlsDateiPfad)
    6. Else
    7. MsgBox("irgendein Fehler... zum Test")
    8. End If
    9. End Sub
    :)

    VB.NET-Quellcode

    1. "\FILES_" & Form1.Archiv_Name & "\FILES\Pers_SECRET\" & PNR & "."


    der ist dran, mußt den Balken nach recht schieben, dann siehst die ganze Zeile...

    bin aber selbst schon darauf reingefallen :)


    PNG ist vielleicht ein besseres Format, aber auch größer - die Qualität spielt jetzt nicht wirlich eine Rolle... in diesem Fall...


    Hat sich erledigt... ich hatte in einem Stück Code

    Quellcode

    1. pb1.image = nothing
    stehen....
    Bin ich ein blödl !

    Sorry...

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

    Ich hab noch was vergessen, was ich euch fragen wollte...

    Wie kann ich die Dateigröße eines Bildes beim laden beschränken ???

    VB.NET-Quellcode

    1. Dim BildPfad As String = ""
    2. With OpenFileDialog1
    3. .Filter = "Jpg-Bilder (*.jpg)|*.*"
    4. .FilterIndex = 1
    5. .InitialDirectory = "C:\Users\<USER>\Desktop\"
    6. .Title = "DIMS... Bild auswählen..."
    7. If .ShowDialog() = Windows.Forms.DialogResult.OK Then
    8. BildPfad = IO.Path.GetFullPath(OpenFileDialog1.FileName)
    9. Bild_vorhanden = True
    10. End If
    11. End With
    12. Me.pb1.Image = New System.Drawing.Bitmap(BildPfad)


    Möchte das der Anwender nur Bild bis max. 256 kb laden darf. Also Passfotogröße... das muß reichen.


    Wie würdet Ihr das umsetzen ?
    So wäre meine Idee dazu jetzt mal... was meint Ihr ????

    VB.NET-Quellcode

    1. Dim BildPfad As String = ""
    2. With OpenFileDialog1
    3. .Filter = "Jpg-Bilder (*.jpg)|*.*"
    4. .FilterIndex = 1
    5. .InitialDirectory = "C:\Users\<USER>\Desktop\"
    6. .Title = "DIMS... Bild auswählen..."
    7. If .ShowDialog() = Windows.Forms.DialogResult.OK Then
    8. Dim fi As New IO.FileInfo(OpenFileDialog1.FileName)
    9. If fi.Length < 256000 Then
    10. BildPfad = IO.Path.GetFullPath(OpenFileDialog1.FileName)
    11. Bild_vorhanden = True
    12. Else
    13. MessageBox.Show("Bild zu groß! Maximale Größe 256 kb!", "DIMS Info...", MessageBoxButtons.OK, MessageBoxIcon.Error)
    14. Exit Sub
    15. End If
    16. End If
    17. End With
    18. Me.pb1.Image = New System.Drawing.Bitmap(BildPfad)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „lris08“ ()

    mit einem TypConverter kann man Bitmap nach Byte() konvertieren und zurück.

    VB.NET-Quellcode

    1. dim conv = TypeDescriptor.GetConverter(gettype(Bitmap))
    so, der kann das.

    Übrigens, so ein Byte() kann auch als Datentyp einer typisierten DataColumn eingestellt sein.

    Aber Bilder im Dataset blähen schon gewaltig auf.
    kommt halt drauf an: Wechselst du sehr viel, und soll das Bild schnell da sein, und sinds nicht sooo viele, dann halt das Bild ins Dataset, und Picturebox.Image dran gebunden.

    andernfalls nur den Pfad ins Dataset, und Picturebox.ImageLocation dran gebunden. Dadurch lädt die Pb die Datei aber immer von Platte.

    Verkleinern ist mir bisher nix anneres bekannt, als eine bitmap umzumalen in eine annere, kleinere.
    Dabei gibts da iwas mit Thumbnails, und Thumbnails können glaub auch im bild mit abgespeichert sein, und auch performanter wieder rausgelesen - aber nichts wirklich wissen kleiner Skywalker er tut