Situation: In einer Form wird innerhalb eines Panels eine PictureBox mit Anchor=Top,Left und Dock=Bottom an die Grösse des Panels angebunden. Bei der Grössenveränderung der Form soll die Bildgrösse automatisch im richtigen Bild-und PictureBox-Verhältnis angepasst werden. Dazu folgenden Code:
In der Funktion ist noch nicht alles ok, das Bild erscheint noch zu klein. Doch das ist nicht das Problem.
Das Problem ist: Beim Start der Applikation wird der Resize-Event der PictureBox etwa 30x aufgerufen (habe nicht genau gezählt) - und zwar bevor der Form-Load-Event der startenden Form überhaupt aufgerufen wird. Wenn ich den PictureResize-Event nutzen will, dann verzögert sich der Programmstart stark. Was geschieht da? Gibt es eine andere Möglichkeit, die Bildgrösse an eine veränderte PictureBox im richtigen Verhältnis anzupassen? - Wichtig: Bei SizeMode=StretchImage zu wählen ist keine Option, da Bilder total verzerrt werden.
Ohje - Stelle grad fest, dass ich vermutlich in einem falschen Forumabteil gelandet bin - das gehört wohl unter Multimedia. Wie kann ich diesen Beitrag ans richtige Ort transferieren? - Sorry, ich finde keinen Weg...
*Topic verschoben*
VB.NET-Quellcode
- Private Sub picResBox_Resize(sender As Object, e As EventArgs) Handles picResBox.Resize
- AutosizeImage(picResBox.ImageLocation, picResBox)
- End Sub
- Public Sub AutosizeImage(ByVal ImagePath As String, ByVal picBox As PictureBox, Optional ByVal pSizeMode As PictureBoxSizeMode = PictureBoxSizeMode.Zoom)
- Try
- picBox.Image = Nothing
- picBox.SizeMode = pSizeMode
- If System.IO.File.Exists(ImagePath) Then
- Dim imgOrg As Bitmap
- Dim imgShow As Bitmap
- Dim g As Graphics
- Dim divideBy, divideByH, divideByW As Double
- imgOrg = DirectCast(Bitmap.FromFile(ImagePath), Bitmap)
- divideByW = imgOrg.Width / picBox.Width
- divideByH = imgOrg.Height / picBox.Height
- If divideByW > 1 Or divideByH > 1 Then
- If divideByW > divideByH Then
- divideBy = divideByW
- Else
- divideBy = divideByH
- End If
- imgShow = New Bitmap(CInt(CDbl(imgOrg.Width) / divideBy), CInt(CDbl(imgOrg.Height) / divideBy))
- imgShow.SetResolution(imgOrg.HorizontalResolution, imgOrg.VerticalResolution)
- g = Graphics.FromImage(imgShow)
- g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
- g.DrawImage(imgOrg, New System.Drawing.Rectangle(0, 0, CInt(CDbl(imgOrg.Width) / divideBy), CInt(CDbl(imgOrg.Height) / divideBy)), 0, 0, imgOrg.Width, imgOrg.Height, GraphicsUnit.Pixel)
- g.Dispose()
- Else
- imgShow = New Bitmap(imgOrg.Width, imgOrg.Height)
- imgShow.SetResolution(imgOrg.HorizontalResolution, imgOrg.VerticalResolution)
- g = Graphics.FromImage(imgShow)
- g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
- g.DrawImage(imgOrg, New System.Drawing.Rectangle(0, 0, imgOrg.Width, imgOrg.Height), 0, 0, imgOrg.Width, imgOrg.Height, GraphicsUnit.Pixel)
- g.Dispose()
- End If
- imgOrg.Dispose()
- picBox.Image = imgShow
- Else
- picBox.Image = Nothing
- End If
- Catch ex As Exception
- MsgBox(ex.ToString)
- End Try
- End Sub
In der Funktion ist noch nicht alles ok, das Bild erscheint noch zu klein. Doch das ist nicht das Problem.
Das Problem ist: Beim Start der Applikation wird der Resize-Event der PictureBox etwa 30x aufgerufen (habe nicht genau gezählt) - und zwar bevor der Form-Load-Event der startenden Form überhaupt aufgerufen wird. Wenn ich den PictureResize-Event nutzen will, dann verzögert sich der Programmstart stark. Was geschieht da? Gibt es eine andere Möglichkeit, die Bildgrösse an eine veränderte PictureBox im richtigen Verhältnis anzupassen? - Wichtig: Bei SizeMode=StretchImage zu wählen ist keine Option, da Bilder total verzerrt werden.
Ohje - Stelle grad fest, dass ich vermutlich in einem falschen Forumabteil gelandet bin - das gehört wohl unter Multimedia. Wie kann ich diesen Beitrag ans richtige Ort transferieren? - Sorry, ich finde keinen Weg...
*Topic verschoben*
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()