How to zoom in a Picturebox with scrollwheel in vb.net

后端 未结 3 1903
挽巷
挽巷 2020-12-16 03:19

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

3条回答
  •  爱一瞬间的悲伤
    2020-12-16 04:03

    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
    

提交回复
热议问题