问:如何在图片框上实现当前鼠标位置的缩放,例如放大 Google 地图?
我正在设计一个简单的 GIS/地图引擎作为我的论文工作。该应用程序的设计方式是将地图加载到稍微修改过的选项卡控件的选项卡中。
地图是标准的 JPEG 或 PNG 格式的数字图像,其中大多数具有非常高的分辨率(2000x2000 像素及以上)。
它们加载在作为标签页的子控件添加的图片框中。我已经实现了一个简单的缩放方法作为一个按钮点击事件,它只缩放到图像/图片框的中心。
我想要做的是在鼠标滚轮事件上实现缩放,从而在图片框内的当前鼠标位置上缩放图片。
目前放大的代码如下所示:
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));
Run Code Online (Sandbox Code Playgroud)
另外,我正在试验这个简单的缩放代码。计算有点有效,但在放大/乘以更大的比率时它仍然有相当大的偏移:
pbxMapa.Location = new Point(pbxMapa.Location.X + (int)((pbxMapa.Location.X * zoomRatio - mouseXPbx) / 8), pbxMapa.Location.Y + (int)((pbxMapa.Location.Y * zoomRatio - mouseYPbx) / 8));
Run Code Online (Sandbox Code Playgroud)