picturebox skalieren mit einen fixierten verhältnis

  • VB.NET

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

    picturebox skalieren mit einen fixierten verhältnis

    Hallo,

    Kann sein dass es spät ist und ich zu blöd bin auf die bestimmt einfache lösung zu kommen.
    nunja ich habe ein Pannel, in diesen Pannel ist eine Picturebox in diese Picturebox kommt ein bild.

    die Größe dieses bildes ermittle ich so:

    VB.NET-Quellcode

    1. Bild.Image = New Bitmap(OFD.FileName)
    2. Bild.SizeMode = PictureBoxSizeMode.AutoSize
    3. Dim X1 As Integer = Bild.Width
    4. Dim Y1 As Integer = Bild.Height

    so und jetzt will ich das die picturebox so klein wird das sie in das pannel passt, aber so dass wenn Bild.SizeMode = PictureBoxSizeMode.Zoom ist, kein rand übrigbleibt, heißt das die picturebox mit dem gleichen verhältniss skaliert wird, dass es in das pannel passt.

    ich hab schon viele codes ausporbiert die mir einvielen, aber irgendwie funktioniert dies nicht so ganz...
    Hoffentlich könnt ihr mir helfen, desshalb danke ich schonmal im voraus.
    Habe ich das richtig verstanden:
    Die PictureBox soll das Seitenverhältnis des Bildes behalten UND maximal in das Panel reinpassen?
    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!
    ja, aber halt im modus zoom, weil das bild halt nicht gestreckt werden soll. heißt wenn eine seite größer ist wie das pannel soll diese seite mximal so groß sein wie das panel... und die andere seite soll im gleichbleibenden verhälltniss mit verkleinert werden.

    VB.NET-Quellcode

    1. Public Function GetScaledSize(ByVal IstGröße As Size, ByVal MaxSize As Size) As Size
    2. Dim scalX As Double = MaxSize.Width / IstGröße.Width
    3. Dim scalY As Double = MaxSize.Height / IstGröße.Height
    4. Dim ScalRes As Double = 1
    5. If scalX > scalY Then ScalRes = scalY Else ScalRes = scalX
    6. Dim SizeX As Integer = CInt(IstGröße.Width * ScalRes)
    7. Dim SizeY As Integer = CInt(IstGröße.Height * ScalRes)
    8. Return New Size(SizeX, SizeY)
    9. End Function


    Panel.Size ist die MaxSize, die Größe der Picturebox die IstGröße. Als Ergebnis erhältst du die neue Size für die Picturebox. Hättest dir btw nur mal meinen Link angucken müssen, aber der ist sicherlich über nacht unsichtbar geworden und/oder man hätte es verstehen müssen^^