PictureBox Bildformat

  • VB.NET

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

    PictureBox Bildformat

    Hallo an alle!

    Ich programmiere derweil in Visual-Basic eine kleine Anwendung, bei der Bilder per Image.FromFile geladen werden. Die bilder die ich zu testzwecken lade, sind in Hochformat, werden jedoch im 90° gedreht angezeigt.
    Wie kann ich die Bilder so laden wie Sie tatsächlich sind? Denn beim abfragen, ob Breite > Höhe ist, kann ja das Bild richtig herum ODER auf dem Kopf stehen.
    hat jemand eine elegante Lösung/Idee?


    Mit freundlichen Grüßen
    Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    Acr0most schrieb:

    90° gedreht
    Meinst Du so was:

    VB.NET-Quellcode

    1. Dim bmp = New Bitmap("C:\Temp\Test.png")
    2. bmp.RotateFlip(RotateFlipType.Rotate90FlipNone) ' hier das richtige raussuchen
    3. Me.PictureBox1.Image = bmp
    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!
    Also ich lade das Image wie gesagt per Image.FromFile.

    Normalerweise sind die Bilder, wenn ich sie einfach so öffne im Hochformat und werden "richtigherum" angezeigt.
    sobald das Bild in die PicBox geladen ist und angezeigt wird, ist es 90° nach rechts gedreht.

    Ich teste jetzt ob es möglicherweise funktioniert, wenn ich das Bild vorher als bitmap einlese.


    Das RoateFlip habe ich bereits gemacht, jedoch ist wie gesagt das Bild dann entweder richtig herum oder genau auf dem Kopf, deshalb ist das für diesen Zweck nicht das richtige.


    Edit: auch mit bmp ist das Bild gedreht...Lässt sich irgendwo auslesen, wie das Bild angezeigt werden muss?
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Lässt sich irgendwo auslesen, wie das Bild angezeigt werden muss?
    nein, bzw. ergibt keinen Sinn.
    Bilder werden richtig angezeigt, und wenn man sie gedreht haben will, muss man sie drehen.
    Dass deine Bilder verdreht geladen werden halte ich für ausgeschlossen, und vermute, dass da iwie wesentlich komplexerer Code mit im Spiel ist, der an ieiner Stelle Mist baut.

    Am besten du bastelst eine kleine TestAnwendung, die den Fehler reproduziert, und hängst die hier an.
    Ich könnt fast wetten, das wird dir nicht gelingen, so eine Testanwendung zu schreiben, aber dabei findest du wahrscheinlich wie nebenbei den eigentlichen Fehler ("Testanwendung schreiben" ist ein viel-erprobtes Mittel für so unauffindbare Bugs)

    ErfinderDesRades schrieb:

    nein, bzw. ergibt keinen Sinn.
    Doch.
    Moderne Kameras tragen z.B. in einem Tag ein, wie rum das Bild aufgenommen wurde, das müsste ausgelesen werden.
    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!
    Also..

    Danke an @ErfinderDesRades für den Tipp mit den Testanwendungen -> werde ich demnächst öfter berücksichtigen!

    Ich habe wie gesagt ein Projekt erstellt mit Button und PicBox und folgendem Code

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. PictureBox1.Image = Image.FromFile("c:\Users\Programmierung\Pictures\1.jpg")
    3. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    4. End Sub


    So.. wenn ich nun die Bilder lade, die mit meinem Handy aufgenommen habe, sind diese verdreht -> nicht immer genau um 90°, sondern auch mal 180 / 270.

    Ein eben erstelltes Bild in Paint.NET wird jedoch korrekt angezeigt 8|

    Hat jemand eine Ahnung wie ich das Format herauslese? Also das was @RodFromGermany meinte.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    Acr0most schrieb:

    Ein eben erstelltes Bild in Paint.NET
    erstelltes Bild ist ja auch nicht verdreht aufgenommen.
    So. Die Dinger heißen Exif-Flags.
    Gugst Du hier.
    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!
    Vielen Dank @RodFromGermany !

    Habe es jetzt mit den Efix Orientation Values gelöst.

    Hier ein möglicher Code wenn jemand über das gleiche Problem stolpern sollte:

    VB.NET-Quellcode

    1. Dim img As Image
    2. img = Image.FromFile("pfad")
    3. PictureBox1.Image = img
    4. PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
    5. Dim properties As PropertyItem() = img.PropertyItems
    6. For Each p As PropertyItem In properties
    7. If p.Id = 274 Then
    8. Dim orientation As Short = BitConverter.ToInt16(p.Value, 0)
    9. Select Case orientation
    10. Case 1
    11. PictureBox1.Image.RotateFlip(RotateFlipType.RotateNoneFlipNone)
    12. Case 3
    13. PictureBox1.Image.RotateFlip(RotateFlipType.Rotate180FlipNone)
    14. Case 6
    15. PictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipNone)
    16. Case 8
    17. PictureBox1.Image.RotateFlip(RotateFlipType.Rotate270FlipNone)
    18. End Select
    19. End If
    20. Next



    Mit freundlichen Grüßen
    Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    Acr0most schrieb:

    VB.NET-Quellcode

    1. Case 1
    kannst Du ersatzlos streichen, da wird nix gemacht. ;)
    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!