问:如何在图片框上实现缩放当前鼠标位置,例如放大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));
另外,我正在试验这个简单的缩放代码。计算有些效果,但在使用更大的比率进行缩放/乘法时仍然有相当大的偏移:
pbxMapa.Location = new Point(pbxMapa.Location.X + (int)((pbxMapa.Location.X * zoomRatio - mouseXPbx) / 8), pbxMapa.Location.Y + (int)((pbxMapa.Location.Y * zoomRatio - mouseYPbx) / 8));
感谢任何帮助和建议,提前谢谢。
答案 0 :(得分:4)
下面的代码缩放并拉伸当前鼠标位置的pictureBox
pictureBox1.Width = (int)(pictureBox1.Width * zoomratio );
pictureBox1.Height = (int)(pictureBox1.Height * zoomratio );
pictureBox1.Top = (int)(e.Y - zoomratio * (e.Y - pictureBox1.Top));
pictureBox1.Left = (int)(e.X - zoomratio * (e.X - pictureBox1.Left));
答案 1 :(得分:0)
我设法调整了这行代码中位置的计算。它工作正常, 它正在按照我需要的方式进行缩放。
pbxMapa.Location = new Point(pbxMapa.Location.X + (int)(((pbxMapa.Location.X - mouseXPbx) / 10) * zoomRatio), pbxMapa.Location.Y + (int)(((pbxMapa.Location.Y - mouseYPbx) / 10) * zoomRatio));