I\'m using a set of graphics overlays to draw an image inside a picturebox control using the graphics object. I have placed the Picturebox inside a Panel and set the Panel t
I noticed that there's an undesirable effect with the StretchImage SizeMode that ignores the image ratio. I just added a width and height ratio variable to include in the "zoom" algorithm. See _ratWidth and _ratHeight in code below.
Public Class Form1
Private _originalSize As Size = Nothing
Private _scale As Single = 1
Private _scaleDelta As Single = 0.0005
Private _ratWidth, _ratHeight As Double
Private Sub Form_MouseWheel(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseWheel
'if very sensitive mouse, change 0.00005 to something even smaller
_scaleDelta = Math.Sqrt(PictureBox1.Width * PictureBox1.Height) * 0.00005
If e.Delta < 0 Then
_scale -= _scaleDelta
ElseIf e.Delta > 0 Then
_scale += _scaleDelta
End If
If e.Delta <> 0 Then _
PictureBox1.Size = New Size(CInt(Math.Round((_originalSize.Width * _ratWidth) * _scale)), _
CInt(Math.Round((_originalSize.Height * _ratHeight) * _scale)))
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
'init this from here or a method depending on your needs
If PictureBox1.Image IsNot Nothing Then
_ratWidth = PictureBox1.Image.Width / PictureBox1.Image.Height
_ratHeight = PirctureBox1.Image.Height / PictureBox1.Image.Width
PictureBox1.Size = Panel1.Size
_originalSize = Panel1.Size
End If
End Sub
End Class