Vb.net图片框缩放

标签 vb.net mouse picturebox zooming

我正在尝试在一定程度上复制 Windows 照片查看器。

现在我有一个带有图片框的表单,并且能够使用鼠标移动它并使用滚轮放大/缩小。

但是,我希望放大到鼠标指针。您可以通过在 Windows 照片查看器中打开一个相当大的图像,然后在远离图像中心的某个地方用鼠标缩放来了解我要解释的内容。我想复制它,但到目前为止我只能放大和缩小。

我知道我必须将图像沿鼠标指针的相反方向移动到表单的中心,并根据鼠标离表单中心的距离改变每个滚轮滴答移动的量,但这就是我被困的地方。

这是我的可笑、困惑的代码,一半被注释掉了,一半在不工作和完全不工作之间:

    Dim Me_Center As Point = New Point(Me.Width / 2, Me.Height / 2)
    Dim PB_Center_R As Point = New Point(PictureBox1.Width / 2, PictureBox1.Height / 2)
    Dim PB_Center As Point = New Point(PictureBox1.Location.X + PB_Center_R.X, PictureBox1.Location.Y + PB_Center_R.Y)
    Dim PB_Diff As Point = (PB_Center - MousePos)


    PictureBox1.Location = New Point((Me_Center - PB_Center_R) - PB_Diff)

    'PictureBox1.Location = New Point((Me.Width / 2) - (PictureBox1.Width / 2), (Me.Height / 2) - (PictureBox1.Height / 2))

    '(Me.Width / 2) - (PictureBox1.Width + Pos.X / 2), (Me.Height / 2) - (PictureBox1.Height - Pos.Y / 2)
    'PictureBox1.Location = New Point((Me.Width / 2 - (PictureBox1.Width / 2)) + XP, (Me.Height / 2 - (PictureBox1.Height / 2)) - YP)

这几乎完全符合我的要求(如果您在运行此表单时点击“打开可缩放图像”,但我无法确切理解它是如何工作的:http://www.vbforums.com/showthread.php?654846-ZoomPictureBox-picture-control-with-mouse-centred-zooming

最佳答案

您可以根据需要调整包含图像的 PictureBox 的大小。将 SizeMode 设置为 Zoom,以便图像自动重新调整其大小:

PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom

然后根据需要调整 PictureBox 的大小。

您可以通过在窗体上添加事件 MouseMove 并将位置存储在变量中来检测窗体中的鼠标位置。或者您可以随时通过以下方式获取鼠标在屏幕中的位置:

Dim p As Point = Me.PointToClient(Cursor.Position)

您可以在这里阅读类似的问题:How to zoom in a Picturebox with scrollwheel in vb.net

关于Vb.net图片框缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666598/

相关文章:

c# - 是否有使用 NUnit 测试复杂函数的通用方法?

c++ - 如何在 linux 中读取低级鼠标点击位置。

windows - winapi中的简单鼠标移动检测(但没有光标移动)

C# 俄罗斯方 block 游戏性能缓慢

C#:使用滚动条缩放图片框图像的简单而实用的方法

vb.net - 处理速度表现奇怪

vb.net - SevenZipSharp 在解压时显示当前解压文件

javascript - 即使光标位于屏幕边缘也可跟踪鼠标速度

mysql - 如何将图片保存到数据库而不破坏图片?

c# - 什么是NullReferenceException,如何解决?