Zugriffsfehler bei Bitmap

  • VB.NET

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

    Zugriffsfehler bei Bitmap

    Hallo,
    Ich öffne ein Bitmap und setze ein paar Pixel.

    Nun möchte ich das alte allerdings löschen und durch das neue( mit den gesetzten Pixeln ) mit dem gleichen Namen ersetzen.

    VB.NET-Quellcode

    1. Private Sub Makeit()
    2. Dim C As Bitmap = Bitmap.FromFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\New.png")
    3. IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\New.png")
    4. Dim DD As List(Of String) = Compare(C)
    5. C = SetPixel(C, DD)
    6. C.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\New.png", Imaging.ImageFormat.Png)
    7. End Sub


    Der Fehler erscheint immer in der Codezeile:

    VB.NET-Quellcode

    1. IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\New.png")


    Der Prozess kann nicht auf die Datei "C:\Users\Admin\Desktop\New.png" zugreifen, da sie von einem anderen Prozess verwendet wird.


    Ist ja auch klar , weil die Codezeile:

    VB.NET-Quellcode

    1. Dim C As Bitmap = Bitmap.FromFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\New.png")


    Die Datei ja noch offen hat.

    Aber wie kann ich das lösen?
    Nein zeigt den selben Fehler in der selben Codezeile.

    Code sieht so aus jetzt:

    VB.NET-Quellcode

    1. Dim C As Bitmap = Bitmap.FromFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\New.png")
    2. Dim B As Bitmap = C.Clone()
    3. C.Dispose()
    4. IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\New.png")
    5. Dim DD As List(Of String) = Compare(B)
    6. B = SetPixel(B, DD)
    7. B.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\New.png", Imaging.ImageFormat.Png)
    Bitmap.FromFile erstellt leider bereits eine Kopie, weshalb das Bild geöffnet bleibt, auch wenn du Dispose verwendest, also müsstest du Bitmap.FromStream verwenden und einen FileStream übergeben, welchen du dann schließen kannst...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---