rotiertes, neues Bitmap kann nicht von PictureBox verwendet werden

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Bartosz.

    rotiertes, neues Bitmap kann nicht von PictureBox verwendet werden

    Hallo zusammen,


    ich habe mir Code besorgt, mit dem ich ein Bild rotieren kann. Das Bild lässt sich jedoch nicht mit der PictureBox darstellen.

    VB.NET-Quellcode

    1. Using memory As System.IO.MemoryStream = New System.IO.MemoryStream()
    2. Dim BMP As New BitmapImage()
    3. BMP.BeginInit()
    4. BMP.UriSource = New Uri(Pfad)
    5. BMP.StreamSource = memory
    6. BMP.Rotation = Rotation_1
    7. BMP.EndInit()
    8. BMP.Freeze()
    9. Try
    10. PictureBox1.Image = New Bitmap(BMP.StreamSource)
    11. Catch ex1 As System.ArgumentException
    12. MessageBox.Show($"{ex1.Message}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    13. End Try
    14. End Using


    Der Fehler liegt in Zeile 11. BMP.Metadata löste eine Ausnahme aus. Somit ist .StreamSource auch nicht gültig.
    Übrigens: Ich verwende einen MemoryStream, weil ich ein System.Windows.Media.Imaging.BitmapImage zu einem normalen Bitmap machen muss....
    Bilder
    • Screenshot VS - Kopie.jpg

      124,73 kB, 1.366×380, 69 mal angesehen
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    Ich versteh grad nicht, was genau das werden soll. Du befüllst den MemoryStream ja gar nicht. Wie soll das was werden?
    Aber das ganze Vorhaben verwirrt mich. Für's einfache Rotieren reicht mir das:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim OriginalImage = Image.FromFile("D:\VaporiZed.png")
    3. PictureBox1.Image = OriginalImage
    4. End Sub
    5. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    6. PictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipNone)
    7. PictureBox1.Refresh()
    8. End Sub
    Bilder
    • EasyRotation.png

      40,86 kB, 454×124, 67 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Tja, dann hat sich das wohl erledigt. :rolleyes:

    Ich dachte, das muss über die Metdaten gehen, weil ich es in der Vergangenheit beim Stöbern nur so gesehen habe, und habe mir wegen des Befüllens der PictureBox nen Wolf gesucht. Bin auf unegelöste, uralte Threads (nicht nur hier) gestoßen und jetzt ist das eine Zeile. So gut, Haken dran.
    Ich wollte auch nicht wegen so einer Kleinigkeit nen Thread aufmachen, aber ich habs nicht gelöst bekommen.

    ***tief durchatmen***
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    @Bartosz
    Die BitmapImage Class ist nicht die von System.Drawing, sondern System.Windows.Media.Imaging, also WPF.
    Das ist mit WinForm-Image nicht kompatibel.
    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!
    Das ist mit WinForm-Image nicht kompatibel.
    Ja, deswegen der ganze Aufwand. Zum Glück ist das gelöst.
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.