Komprimieren und ersetzten

  • VB.NET

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

    Komprimieren und ersetzten

    hallo, ich arbeite an einem Programm, dass alle Bilderformate einliest, in einer listbox speichert und komprimiert es dann.
    Das einlesen und komprimieren klappt alles wunder bar, aber ich will das wenn ich das bild kompriemer nicht neu speicher, sondern
    mit dem eben komrpimiert bild ersetzt. hier mein quelcode von komprimieren
    kann mir jemand helfen, bitte ?

    VB.NET-Quellcode

    1. PictureBox1.ImageLocation = "c:\bild.jpg"
    2. Dim bSuccess As Boolean = ConvertImage("c:\bild.jpg", _
    3. 200, ImageFormat.Jpeg, "c:\bild.jpg")
    ich versteh es nicht

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Imports System.Drawing.Imaging
    3. Public Class Form1
    4. Private Function ConvertImage(ByVal sFile As String, _
    5. ByVal nWidth As Integer, ByVal nFormat As ImageFormat, _
    6. ByVal sNewFile As String) As Boolean
    7. ' Bildgröße errechnen.
    8. ' Hierbei wird die Originalbreite des Bildes ermittelt,
    9. ' durch sich selbst geteilt und dann mit dem ausgewählten Wert
    10. ' aus(der) Combobox multipliziert.
    11. ' Die Original-Bildhöhe wird nun durch die Original-Bildbreite
    12. ' geteilt und dann ebenfalls mit dem ausgewählten Wert der Combobox
    13. ' multipliziert.
    14. ' So bleibt das Grössenverhältnis von Höhe und Breite erhalten.
    15. ' Originalbild laden
    16. Dim originalBild As Image = Image.FromFile(sFile)
    17. ' Neues Bild-Objekt in der neu berechneten Breite und Höhe erstellen
    18. Dim neuesBild As Image
    19. With originalBild
    20. neuesBild = New Bitmap(CInt(.Width / .Width * nWidth), _
    21. CInt(.Height / .Width * nWidth))
    22. End With
    23. ' Bild in der neuen Größe zeichnen
    24. Dim destGraphic As Graphics = Graphics.FromImage(neuesBild)
    25. With neuesBild
    26. destGraphic.DrawImage(originalBild, 0, 0, .Width + 1, .Height + 1)
    27. End With
    28. Try
    29. ' Neues Bild im gewünschten Form speichern
    30. neuesBild.Save(sNewFile, nFormat)
    31. destGraphic.Dispose()
    32. Return True
    33. Catch ex As Exception
    34. destGraphic.Dispose()
    35. Return False
    36. End Try
    37. End Function
    38. 'Beispiel für den Aufruf der Funktion
    39. ' Bild "d:\bild1.bmp" mit neuer fixer Breite von
    40. ' 200 Pixel als JPG-Datei speichern
    41. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    42. End Sub
    43. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    44. Dim lbfile As String = ListBox1.SelectedItem
    45. Dim Bildfromlb As Image = Image.FromFile(ListBox1.SelectedItem)
    46. Dim bSuccess As Boolean = ConvertImage(ListBox1.SelectedItem, _
    47. 200, ImageFormat.Jpeg, "c:\bild.bmp")
    48. Bildfromlb.Dispose()
    49. IO.File.Delete(ListBox1.SelectedItem)
    50. End Sub
    51. End Class


    es kommz imer nich der zugriffs fehler
    Füg mal zwischen "Return False" (Zeile 43) und "End Try" (Zeile 44) Folgendes ein:

    VB.NET-Quellcode

    1. Finally
    2. neuesBild.Dispose()
    3. originalBild.Dispose()
    Außerdem kannst du

    VB.NET-Quellcode

    1. Dim Bildfromlb As Image = Image.FromFile(ListBox1.SelectedItem)
    2. ' und
    3. Bildfromlb.Dispose()
    weglassen.

    Dann sollte es funktionieren.