在当前鼠标位置缩放/拉伸图片框?

问:如何在图片框上实现缩放当前鼠标位置,例如放大Google地图?

我正在设计一个简单的GIS /地图引擎作为我的论文工作。 应用程序的设计方式是将地图加载到一个经过简单修改的​​tabcontrol的选项卡中。

地图是标准的JPEG或PNG格式数字图像,大多数都具有非常高的分辨率(2000x2000px及以上)。

它们被加载到图片框中,这些图片框被添加为tabpages的子控件。 我已经实现了一个简单的缩放方法作为按钮点击事件,只放大到图像/图片框的中心。

我想要做的是实现鼠标滚轮事件的缩放,使图片在图片框内的当前鼠标位置放大。

放大的代码目前如下所示:

timesZoomed += 1; zoomRatio += 0.1f; pbxMapa.Width = pbxMapa.Width * zoomRatio; pbxMapa.Height = pbxMapa.Height * zoomRatio; pbxMapa.Location = new Point((this.Width / 2) - (pbxMapa.Width / 2), this.Height / 2) - (pbxMapa.Height / 2)); 
  • 默认的“zoomRatio”值为1,并且增加到0.6f。
  • 参数“timesZoomed”默认值为0,最多为6。
  • “pbxMapa”是带有地图加载图像的图片框。 图片框的“ImageSizeMode”道具设置为“缩放”,但图片框的大小设置为加载的地图图像的完整大小。

此外,我正在尝试这个简单的缩放代码。 计算有些效果,但在使用更大的比例进行缩放/乘法时仍然有相当大的偏差:

  pbxMapa.Location = new Point(pbxMapa.Location.X + (int)((pbxMapa.Location.X * zoomRatio - mouseXPbx) / 8), pbxMapa.Location.Y + (int)((pbxMapa.Location.Y * zoomRatio - mouseYPbx) / 8)); 
  • “mouseXPbx”和“mouseYPbx”变量表示“pbxMapa”内部的当前鼠标位置。 我将8除以最小化定位偏移。

任何帮助和建议表示赞赏,提前谢谢。

下面的代码缩放并拉伸当前鼠标位置上的pictureBox

 pictureBox1.Width = (int)(pictureBox1.Width * zoomratio ); pictureBox1.Height = (int)(pictureBox1.Height * zoomratio ); pictureBox1.Top = (int)(eY - zoomratio * (eY - pictureBox1.Top)); pictureBox1.Left = (int)(eX - zoomratio * (eX - pictureBox1.Left)); 

我设法调整了这行代码中位置的计算。 它工作正常,它正在我需要的方式缩放。

 pbxMapa.Location = new Point(pbxMapa.Location.X + (int)(((pbxMapa.Location.X - mouseXPbx) / 10) * zoomRatio), pbxMapa.Location.Y + (int)(((pbxMapa.Location.Y - mouseYPbx) / 10) * zoomRatio));