带有缩放和平移功能的 Windows 窗体的 PictureBox
Posted
技术标签:
【中文标题】带有缩放和平移功能的 Windows 窗体的 PictureBox【英文标题】:Windows Forms' PictureBox with zooming and panning 【发布时间】:2011-02-06 04:12:45 【问题描述】:我的应用程序需要控制显示位图 (jpg),还需要缩放和平移它们(因此,如果您按下鼠标按钮,您可以在框架内“移动”缩放的图片)
我所做的是将面板放在窗体上,然后在面板内放置图片框(锚定顶部,左侧)。 所以如果我需要缩放它,我只是从缩放按钮事件中执行下面的代码:
private void ZommInOut(bool zoom)
int zoomRatio = 10; // percent
int widthZoom = pBox.Width * zoomRatio /100;
int heightZoom = pBox.Height * zoomRatio /100;
if (zoom)
widthZoom *= -1;
heightZoom *= -1;
pBox.Width += widthZoom;
pBox.Height += heightZoom;
效果不错。图像被缩放,面板显示滚动条 - 所以我有简单的平移功能。
我缺少的是可以使用鼠标进行平移 - 我想向任何方向拖动图片以查看图片的其他部分(例如 Acrobat Reader)。 我一直在寻找使用 MouseMove 事件并以编程方式更改滚动条的方法,但我无法做到。
有什么建议吗?
【问题讨论】:
【参考方案1】:您需要在 MouseMove 事件中设置AutoScrollPosition
属性。
您需要跟踪 MouseDown 事件的位置并使用偏移量更新 AutoScrollPosition。
【讨论】:
您为此推荐了谁的 MouseMove 事件?表单还是面板? @Maciej 我认为您没有将鼠标移到表单上。你的 MouseMove 最终会被 PictureBox 捕获。 对不起,我弄错了 - 我想问一下 PictureBox 面板(不是表格)。但你是对的,PB是正确的地方。谢谢【参考方案2】:我建议使用 Graphics.DrawImage 创建一个控件并绘制图像的一部分 - 通过这种方式,您可以控制图像的缩放方式(三线性等),并且还可以使用更少的内存。您可以覆盖 OnMouseMove 以获取鼠标移动
【讨论】:
你可能是对的。但我一直在寻找快速且无代码的东西。提到的解决方案对我有用。以上是关于带有缩放和平移功能的 Windows 窗体的 PictureBox的主要内容,如果未能解决你的问题,请参考以下文章