如何在缩放和调整大小后将Picturebox图像移动到Picturebox的0,0?

问题描述 投票:0回答:1

我已经用谷歌搜索了所有可能的解决方案,并尝试了几个小时但没有成功: 使用 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 中重新绘制?

非常感谢任何提示!

vb.net image zooming picturebox
1个回答
0
投票

有了

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
© www.soinside.com 2019 - 2024. All rights reserved.