c# - 在当前鼠标位置缩放/拉伸(stretch)图片框?

标签 c# visual-studio gis picturebox zooming

问:如何在图片框上实现鼠标当前位置的缩放,就像在 Google map 中缩放一样?

作为我的论文工作,我正在设计一个简单的 GIS/ map 引擎。该应用程序的设计方式是将 map 加载到经过轻微修改的选项卡控件的选项卡中。

map 是标准的 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”是带有加载的 map 图像的图片框。图片框的“ImageSizeMode”属性设置为“缩放”,但图片框的大小设置为加载 map 图像的完整大小。

此外,我正在试验这个简单的缩放代码。计算有点有效,但在缩放/乘以更大的比例时仍然有相当大的偏移:

                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 以最小化定位偏移。

感谢任何帮助和建议,在此先感谢。

最佳答案

下面的代码在当前鼠标位置缩放和拉伸(stretch)了图片框

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));

关于c# - 在当前鼠标位置缩放/拉伸(stretch)图片框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10614807/

相关文章:

python - PNG 支持 python 3.3

c# - 将 LINQ 中的循环缩短为一个 QUERY

c# - 无法在 asp.net 报表查看器中查看 SQL Server 移动报表

c++ - 错误 C2679: "binary ' <<': no operator found which takes a right-hand operand of type ' std::string'(或没有可接受的转换)”

c# - 在 Visual Studio 监 window 口中使用 LINQ 表达式

visual-studio - 强制 Visual Studio 打开特殊(例如 Excel)文件而不是调用另一个程序

c# - 一次性 Ajax.ActionLink,如 Ajax.BeginForm

c# - 使用泛型类型覆盖继承的事件

sql - 如何递归查找两个表之间的相交地理

algorithm - 关于空间索引的好书/文章