Bilddrehen ohne Picturebox, Zugriff auf Bilddatei freigeben

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von stepper71.

    Bilddrehen ohne Picturebox, Zugriff auf Bilddatei freigeben

    Hallo,

    ich möchte ein Bild das auf der Festplatte liegt drehen per Code.
    Geht dies direkt ohne das Bild zuvor in eine Picturebox zu laden?

    Ich habe bereits diesen Ansatz über eine Picturebox versucht:

    VB.NET-Quellcode

    1. picBildDrehen.Image = Image.FromFile(MeinPfad)
    2. Dim bild As Bitmap = CType(picBox.Image, Bitmap)
    3. bild.RotateFlip(RotateFlipType.Rotate90FlipNone)


    Was soweit funktioniert.
    Jetzt möchte ich das Bild wieder speichern und die vorhandene Datei überschreiben.
    Versucht habe ich:

    VB.NET-Quellcode

    1. bild.Save(MeinPfad)


    Was aber nicht geht weil auf das Bild noch vom System zugegriffen wird.
    Wie gebe ich jetzt den Zugriff wieder frei ohne das ich das gedrehte Bild "verliere"?
    Ich muss diese Anfrage leider nochmal aufmachen.

    Ich habe jetzt wieder das Problem das der Zugriff auf Dateien gesperrt.
    Im nachfolgenden Code werden Bilddateien eingelesen und in Pictureboxen gesetzt.

    Diese Problem wurde auch schon unter [VB.NET] Datei wird nicht freigegeben
    besprochen, dort aber nicht zu Ende geführt.

    VB.NET-Quellcode

    1. For ....
    2. With newcontrol
    3. 'Durch diese Zeile wird die Datei gesperrt
    4. Dim imgSource As Image = Image.FromFile(oFile.FullName).GetThumbnailImage(80, 80, Nothing, IntPtr.Zero)
    5. Dim imgDestination As New Bitmap(imgSource)
    6. 'Hiermit sollte der Zugriff wieder freigegeben werden
    7. imgSource.Dispose()
    8. .Image = imgDestination
    9. End With
    10. Next


    Das Problem ist, das nicht alle Dateien gesperrt werden. Meistens sind die ersten 3-4 Dateien nicht gesperrt, der Rest dann ja, manchmal auch alle Dateien.
    Kann es sein, dass das Dispose zu "träge" reagiert (Timingproblem)?
    @stepper71:: Probier mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim fi As New IO.FileInfo("D:\Temp\Test.jpg") ' nur zum Test, ob sich die Datei löschen lässt
    3. Dim bmp As Bitmap = Nothing
    4. Using fs As New IO.FileStream(fi.FullName, IO.FileMode.Open, IO.FileAccess.Read)
    5. bmp = New Bitmap(fs)
    6. fs.Close()
    7. End Using
    8. PictureBox1.Image = bmp
    9. fi.Delete()
    10. End Sub
    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!