Picturebox zeigt Bild um 90 Grad gedreht an

  • VB.NET

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

    Picturebox zeigt Bild um 90 Grad gedreht an

    Hallo zusammen,

    ich habe ein Problem mit einer Picturebox und einem Bild aus einer Outlook Mail.

    Das aktuelle Programm (VB.Net 2019, Net-Framework 4.7.2) speichert mit

    Spoiler anzeigen

    Quellcode

    1. Public objOL As New Microsoft.Office.Interop.Outlook.Application
    2. Dim myobj As Object
    3. myobj = objOL.ActiveExplorer.Selection.Item(1)
    4. colAtts = myobj.AttachmentsoAtt.SaveAsFile(sFile)


    den Anhang (ein JPG-Bild) aus einer Outlook 2019 e-Mail (mit einer Breite von 3000 und Höhe von 4000 Pixel) ab (sfile = kpl. Dateipfad). Die Dateieigenschaften über den Windows Explorer zeigen auch die richtigen Werte 3000 x 4000 an.
    In der e-Mail und auch im Windows Explorer wird das Bild richtig im Hochformat angezeigt, nach dem es abgespeichert wurde. Auch alle anderen Programme wie Paint, Paint.Net und die Fotoanzeige zeigen es im Hochformat an.

    Wenn ich aber nun diese Datei manuell in eine Picturebox unter Image einfüge, so wird es um 90 Grad gegen den Uhrzeiger dargestellt. Auch das Anzeigen per Code mit PBox_BildAbspeichern.Image = Image.FromFile(sfile) bringt den gleichen Effekt.

    Dann habe ich mal Paint gestartet und die Datei einfach so wieder abgespeichert. Das "neue" Ergebnis wird wie oben auch richtig dargestellt, also erst einmal keine Veränderungen. Dann habe ich das Bild mal manuell wieder in die Pciturebox eingefügt: Siehe da, jetzt wird es richtig dargestellt.

    Da mein Programm noch die Möglichkeit bittet, das Bild drehen zu können, wird es dann eh noch einmal aus der Picturebox heraus abgespeichert. Die Picturebox hat nur die Eigenschaft SizeMode = Zoom fest eingestellt bekommen und ist sonst von den Eigenschaften Standard.

    Jetzt kommt meine Frage: Woran liegt es, dass ich das Bild nicht richtig angezeigt bekomme?

    Hoffe, dass jemand von Euch mir helfen kann.

    Gruß
    Volker

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Volker Bunge“ ()

    Volker Bunge schrieb:

    In der e-Mail und auch im Windows Explorer wird das Bild richtig im Hochformat angezeigt, nach dem es abgespeichert wurde.
    Das Bild hat an Bord gespeichert, wie es bei der Aufnahme gedreht war.
    Das musst Du beim Einlesen berücksichtigen:
    cyotek.com/blog/handling-the-o…ag-in-images-using-csharp
    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!
    Hallo RodFromGermany,

    vielen Dank für den Hinweis. Da muss man aber auch erst einmal drauf kommen.

    Ab pro pro drauf kommen.

    Wenn ich ein Bild auf eine Seite drucken möchte, welches die maximale Breite bzw. Höhe hat, gehe ich bei meinem Programm wie folgt vor.

    1. Ich hole mir die Pixelwerte aus der Datei (Bsp. 1200 x 1600)
    2. Dann rechne ich diese in mm um (Pixel * 0.2645833333) und ziehe 2 x 0,5 cm Seitenrand ab
    3. Danach prüfe ich, ob die Millimeter größer sind als die max. Breite. Wenn ja, dann berechne ich die neuen max. Breite und Höhe
    4. Jetzt rechne ich für die Anzeige in der Seitenansicht die Millimeter in Points um (mm x 2.834645669)

    Leider ergibt sich dann nach dem Ausdruck folgende ca. Werte Breite = 14,3 cm und Höhe 19,15 cm

    Jetzt meine Frage: Gibt es irgendwo eine Übersicht, welches Gerät (Bildschimr/Drucker), Control (PictureBox, PrintPreView) mit welchen Maßeinheiten arbeitet? Mit welcher Maßeinheit müsste ich meine neuen mm umrechnen, damit Sie meine gewünschte Werte von 200 mm x 266,66 mm nach dem Ausdruck ergeben?

    Vielen Dank für Deine / Eure Hilfe

    Gruß
    Volker
    @Volker Bunge Das weiß ich nicht auswendig, ich müsste dazu ein Testprogramm schreiben und das untersuchen.
    Vorschlag:
    Du erstellst ein Testprogramm, untersuchst das ganze, und wenn es rund läuft (erst dann!!!) schreibst Du einen Post im Thread Drucken mehrseitiger Dokumente
    ;)
    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!