问:如何在图片框上实现以当前鼠标位置为基点的缩放,类似于Google Maps中的缩放?
我正在设计一个简单的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));
- "zoomRatio"的默认值为1,可以增加到0.6f。
- 参数“timesZoomed”的默认值为0,最多可以增加到6。
- “pbxMapa”是加载地图图像的picturebox。Picturebox的“ImageSizeMode”属性设置为“Zoom”,但picturebox的大小设置为加载的地图图像的全尺寸。
另外,我正在尝试这个简单的缩放代码。计算有些有效,但当缩放/乘以更大的比例时仍然存在相当大的偏移:
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是为了减小定位时的偏移。
任何帮助和建议都将不胜感激,提前致谢。