Bild laden und speichern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von manni4545.

    Bild laden und speichern

    Hi

    ich habe ein kleines Adressbuch mit .net erstellt.

    Habe ein Dataset dort soll jetzt der Bildpfad eingetragen und gespeichert werden.

    Im Designer gibt es eine Textbox, ein Bild holen bzw. Bild löschen Button und eine PictureBox.
    Meine Adressdaten werden in eine XML Datei gespeichert.
    Das Bild soll nicht in eine Datenbank gespeichert werden.

    Ich hoffe, ich konnte mich richtig ausdrücken garnicht so einfach.
    Danke euch..

    Gruß
    Manni
    Bilder
    • bild.jpg

      76,52 kB, 958×507, 382 mal angesehen

    VB.NET-Quellcode

    1. ' Speichern
    2. Me.PictureBox1.Image.Save("pfad", System.Drawing.Imaging.ImageFormat.Jpeg)
    3. ' Laden
    4. Me.PictureBox1.Image = Image.FromFile("‪‪pfad")
    5. ' oder auch so
    6. Me.PictureBox1.ImageLocation = "pfad"

    :)
    Visual Basic.NET 8o
    MS-SQL
    8o
    Hi
    wahrscheinlich habe ich es nicht richtig erklärt.
    Ich versuch es nochmal.

    Habe ein Dataset dort möchte ich noch eine Spalte Image hinzufügen.

    Beim klicken auf den Button Bild möchte ich ein Bild auswählen ich schätze mal mit openfiledialog.
    Danach soll der Bildpfad im Dataset Image gespeichert werden.
    Beim öffnen des Programms soll mir das Bild das im Dataset als Pfad steht zur laufzeit in einer Picturebox angezeigt werden.
    zb. Hans Mustermann hat ein Bild, John Doe wird das Bild angezeigt usw.
    Das Bild bzw. Bildpfad soll auch wieder löschbar sein.

    Siehe mein hochgeladenes Bild. Dort gibt es eine Textbox für den Bildpfad ein Bild Button für den openfiledialog ein löschbutton und eine picturebox für das anzuzeigende Bild.

    Das so im groben.

    Danke euch für eine Hilfe

    Manni
    Das Speichern der anderen Daten klappt? Nen Pfad als String speichern geht dann genauso.

    Wenn die ne Spalte hierfür fehlt, kannst du dir genau so anlegen, wie du es bei den anderen Daten gemacht hast.

    Wie sieht das Speichern und Laden bei dir den aktuell aus?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Also Namen, Vornamen und so kannst du bereits speichern?

    Alles über den OpenFileDialog findest du hier:
    msdn.microsoft.com/de-de/libra…filedialog(v=vs.110).aspx

    SaveFileDialog brauchst du hier eigentlich nicht.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hi

    OpenFileDialog hab ich mal.

    VB.NET-Quellcode

    1. Private Sub btn_bildladen_Click(sender As Object, e As EventArgs) Handles btn_bildladen.Click
    2. Dim OpenFileDialog1 As New OpenFileDialog()
    3. OpenFileDialog1.Filter = "All files (*.*)|*.*"
    4. OpenFileDialog1.FilterIndex = 2
    5. OpenFileDialog1.RestoreDirectory = True
    6. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    7. PictureBox1.ImageLocation = OpenFileDialog1.FileName
    8. End If
    9. End Sub


    Ich kann das Bild auswählen. Wie krieg ich es nun gebacken, dass der Bildpfad im Dataset unter Image gespeichert wird?
    Und auch wie im Bild oben in der Texbox "Bild pfad" angezeigt wird?
    Das kapier ich noch nicht. Siehe Bild
    Bilder
    • bildpfad.jpg

      73,7 kB, 951×495, 346 mal angesehen
    @manni4545 Du willst gleichzeitig etwas zu viele Probleme lösen, lass das sein.
    Mach Dir zunächst eine Liste und zerlege Dein Hauptanliegen in eine Reihe einzelner disjunkter Teilprobleme, die Du jedes für sich allein in je einem separaten Projekt löst.
    Wenn die alle zu Deiner Zufriedenheut gelöst sind, packst Du sie in einem neuen Projekt zusammen.
    Die Einzelprojekte hebst Du Dir auf, archivierst sie und hast dann mit der Zeit eine ordentliche Snippetsammlung ("Trickkiste"), aus der Du dann und wann schöpfen kannst. 8o
    Bei mir sind das schon mal über 1300 Ordner. :thumbsup:
    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!
    Hier drin steht der Pfad zum Bild als String: OpenFileDialog1.FileName -> Das kannst du z.b. in deine TextBox schreiben.

    Was genau verstehst du unter DataSet?
    Nur um sicher zu gehen, darauf hast du mir noch nicht geantwortet: Das Speichern von den anderen Daten klappt bereits?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    manni4545 schrieb:

    Ich kann das Bild auswählen. Wie krieg ich es nun gebacken, dass der Bildpfad im Dataset unter Image gespeichert wird?
    Welchen Datentyp verwendest du in der TabellenSpalte Image?
    Wenn du String vorgesehen hast, kannst du den ausgewählten Pfad dort einfach zuweisen (da solltest aber dann noch die Beanamung überlegen)
    DeineRow.Image = ImagePath

    manni4545 schrieb:

    Und auch wie im Bild oben in der Texbox "Bild pfad" angezeigt wird?
    einfach die ImageSpalte an die TextBox binden
    Morgen,

    einiges habe ich gelöst.

    Habe es so gemacht

    VB.NET-Quellcode

    1. Private Sub btn_bildladen_Click(sender As Object, e As EventArgs) Handles btn_bildladen.Click
    2. Dim OpenFileDialog1 As New OpenFileDialog()
    3. OpenFileDialog1.Filter = "All files (*.*)|*.*"
    4. OpenFileDialog1.FilterIndex = 2
    5. OpenFileDialog1.RestoreDirectory = True
    6. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    7. PictureBox1.ImageLocation = OpenFileDialog1.FileName
    8. ImageTextBox.Text = OpenFileDialog1.FileName
    9. End If
    10. End Sub


    OpenFileDialog funktioniert
    Anzeige in der Textbox funktioniert
    Das Speichern des Bildpfad in Dataset bzw. Datagridview funktioniert


    Jetzt habe ich noch ein Problem
    Das Bild aus dem Bildpfad wird mir für den jeweiligen Datensatz nicht in der PictureBox angezeigt.
    Wähle ich ein neues Bild wird es angezeigt und der Pfad in der DGV angezeit
    Beende ich das Programm und starte ich es wieder wird nichts in der PictureBox angezeigt.
    Wie gehe ich jetzt vor, das aus dem Bildpfad mir auch das Bild angezeigt wird

    `Danke euch

    Gruß
    Manni
    Bilder
    • Bild2.jpg

      80,05 kB, 950×549, 466 mal angesehen

    manni4545 schrieb:

    Jetzt habe ich noch ein Problem
    Das hast Du wohl bei der Initialisierung der GUI einfach vergessen oder in Deiben Form_Load-Event fliegt eine stille Exception.
    Mach das ganze im Form_Shown-Event, nicht aber im Form_Load-Event. Letzteres ist von Bill etwas merkwürdig bestückt, da werden Exceptions einfach verschluckt und Du suchst Dich dann dumm und dusselig, weil Du nicht mitbekommst, dass ein ganz anderer Befehl eine Exception auslöst.
    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!
    Du darfst gerne mal zeigen wie das Speichern/Laden funktioniert bei dir. Aktuell können wir maximal ins Blaue raten um dir zu helfen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    So
    hier mal der komplette Code

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    4. 'Private xmldatabasedata As String = My.Application.Info.DirectoryPath & "\kontakte.xml"
    5. Private _DataPath As String = Application.StartupPath
    6. Private _DataFile As New FileInfo(_DataPath & "\kontakte.xml")
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. LoadDataSet(DataSet1)
    9. ToolStripLabel1.Text = Path.GetDirectoryName(Application.ExecutablePath)
    10. ToolStripLabel4.Text = String.Format("Anzahl Datensätze: {0:0,0}", KontaktBindingSource.Count)
    11. End Sub
    12. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    13. Validate()
    14. KontaktBindingSource.EndEdit()
    15. SaveDataSet(DataSet1)
    16. Refresh()
    17. End Sub
    18. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    19. If MessageBox.Show("Datensatz wirklich löschen?", "Löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
    20. KontaktBindingSource.RemoveCurrent()
    21. ToolStripLabel4.Text = String.Format("Anzahl Datensätze: {0:0,0}", KontaktBindingSource.Count)
    22. Else
    23. MessageBox.Show("Keine Daten zum löschen vorhanden", "Fehler...")
    24. End If
    25. End Sub
    26. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    27. KontaktBindingSource.AddNew()
    28. ToolStripLabel4.Text = String.Format("Anzahl Datensätze: {0:0,0}", KontaktBindingSource.Count)
    29. If String.IsNullOrEmpty(VornameTextBox.Text) Then
    30. VornameTextBox.Focus()
    31. VornameTextBox.BackColor = Color.AliceBlue
    32. Return
    33. End If
    34. End Sub
    35. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    36. KontaktBindingSource.MoveNext()
    37. End Sub
    38. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    39. KontaktBindingSource.MovePrevious()
    40. End Sub
    41. Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    42. KontaktBindingSource.MoveFirst()
    43. End Sub
    44. Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    45. KontaktBindingSource.MoveLast()
    46. End Sub
    47. Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
    48. Me.Validate()
    49. KontaktBindingSource.EndEdit()
    50. SaveDataSet(DataSet1)
    51. Me.Close()
    52. End Sub
    53. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    54. KontaktBindingSource.Filter = String.Format("nachname like '%{0}%' or vorname Like '%{0}%'or telefon Like '%{0}%'or anrede Like '%{0}%'or ort Like '%{0}%' or plz Like '%{0}%'", TextBox1.Text)
    55. End Sub
    56. Public Sub LoadDataSet(ByVal myDS As DataSet)
    57. myDS.Clear()
    58. If _DataFile.Exists Then
    59. myDS.ReadXml(_DataFile.FullName)
    60. End If
    61. End Sub
    62. Public Sub SaveDataSet(ByVal myDS As DataSet)
    63. myDS.WriteXml(_DataFile.FullName)
    64. myDS.AcceptChanges()
    65. End Sub
    66. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    67. ToolStripLabel2.Text = DateTime.Now.ToLocalTime
    68. End Sub
    69. Private Sub btn_bildladen_Click(sender As Object, e As EventArgs) Handles btn_bildladen.Click
    70. Dim OpenFileDialog1 As New OpenFileDialog()
    71. OpenFileDialog1.Filter = "All files (*.*)|*.*"
    72. OpenFileDialog1.FilterIndex = 2
    73. OpenFileDialog1.RestoreDirectory = True
    74. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    75. PictureBox1.ImageLocation = OpenFileDialog1.FileName
    76. ImageTextBox.Text = OpenFileDialog1.FileName
    77. End If
    78. End Sub
    79. End Class


    Bis hierher funtioniert alles. Nur wie gesagt das laden der Bilder aus dem Pfad in die PictureBox
    Ich sehe nirgends, dass du den Pfad aus der Dgv eingesetzt hast, damit das Bild geladen wird. So würdest du an den Pfad kommen um ihn dann einsetzten zu können.

    VB.NET-Quellcode

    1. Dim bildpfad As String = CType(KontaktBindingSource.Current, DataRowView).Row.Field(Of String)(4)
    Hier könnte meine Signatur stehen.

    manni4545 schrieb:

    VB.NET-Quellcode

    1. LoadDataSet(DataSet1)
    Setz mal in die Form1_Load einen Haltepunkt und überzeuge Dich, dass diese Prozedur vollständig abgearbeitet wird. Gugst Du hier.
    Ansonsten änderst Du die Zeile

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    um in

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown
    Load ==> Shown.
    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!

    manni4545 schrieb:

    Jetzt habe ich noch ein Problem
    Das Bild aus dem Bildpfad wird mir für den jeweiligen Datensatz nicht in der PictureBox angezeigt
    Binding ist hier das Zauberwörtchen.
    Ich habe dir schon einmal in Post #11 darauf aufmerksam machen wollen...
    Guck dir das angehängte Testprojekt einmal dazu an.
    Da werden aber nur Bilder(Pfade) via Filedialog in eine Datatable aufgenommen und über die Listbox angezeigt.
    Da wird nichts gespeichert oder geladen (wie ich sehe kannst du das schon :) )
    Darüber wird dir ein einfaches Text-Binding auf ein Label-Steuerelement angewendet, wo der aktuelle Pfad angezeigt wird.
    Links nebenbei wird dir das dazugehörende Bilchen gebunden angezeigt - geschieht über die ImageLocation-Eigenschaft...

    EDIT: Sorry - habe eine falsche Solution erwischt! Projekt wurde ersetzt!
    Dateien

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