我已经用谷歌搜索了所有可能的解决方案,并尝试了几个小时但没有成功: 使用 VB .NET,我有一个带有图片框的表单,其 SizeMode 属性设置为 Zoom,我可以正常显示图像。 我添加了鼠标滚轮功能来扩大/缩小缩放,但图像随后脱离了图片框边界。 我想要做的是将图像重置为图片框的 0,0 坐标。
我可以找到和使用的鼠标滚轮代码是:
Private Sub PicImage_MouseWheel(sender As Object, e As MouseEventArgs) Handles PicImage.MouseWheel
'if very sensitive mouse, change 0.00005 to something even smaller
_scaleDelta = Math.Sqrt(PicImage.Width * PicImage.Height) * 0.00005
If e.Delta < 0 Then
_scale -= _scaleDelta
ElseIf e.Delta > 0 Then
_scale += _scaleDelta
End If
If e.Delta <> 0 Then _
PicImage.Size = New Size(CInt(Math.Round((_originalSize.Width * _ratWidth) * _scale)),
CInt(Math.Round((_originalSize.Height * _ratHeight) * _scale)))
PicImage.Refresh()
End Sub
与
_ratWidth = PicImage.Image.Width / PicImage.Image.Height
_ratHeight = PicImage.Image.Height / PicImage.Image.Width
现在,有没有办法在顶部、左侧位置 0,0 重绘图像,保持宽高比并适合图片框原始大小?
是否应该先将位图调整为 picbox 大小,然后在 picbox 中重新绘制?
非常感谢任何提示!
有了
SizeMode = PictureBoxSizeMode.Zoom
,你就不需要考虑比例了:
Dim _originalSize As Size
Dim _scale = 1.0
Private Sub Form1_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
_originalSize = PicImage.Image.Size
PicImage.Size = _originalSize
End Sub
Private Sub PicImage_MouseWheel(sender As Object, e As MouseEventArgs) _
Handles PicImage.MouseWheel
If e.Delta < 0 Then
_scale /= 1.1
ElseIf e.Delta > 0 Then
_scale *= 1.1
End If
If e.Delta <> 0 Then _
PicImage.Size = New Size(_originalSize.Width * _scale,
_originalSize.Height * _scale)
End Sub