【问题标题】:Windows Forms' PictureBox with zooming and panning带有缩放和平移功能的 Windows 窗体的 PictureBox
【发布时间】: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 事件并以编程方式更改滚动条的方法,但我无法做到。

有什么建议吗?

【问题讨论】:

    标签: c# winforms .net-3.5 bitmap picturebox


    【解决方案1】:

    您需要在 MouseMove 事件中设置AutoScrollPosition 属性。

    您需要跟踪 MouseDown 事件的位置并使用偏移量更新 AutoScrollPosition。

    【讨论】:

    • 您为此推荐了谁的 MouseMove 事件?表单还是面板?
    • @Maciej 我认为您没有将鼠标移到表单上。你的 MouseMove 最终会被 PictureBox 捕获。
    • 对不起,我弄错了 - 我想问一下 PictureBox 面板(不是表格)。但你是对的,PB是正确的地方。谢谢
    【解决方案2】:

    我建议使用 Graphics.DrawImage 创建一个控件并绘制图像的一部分 - 通过这种方式,您可以控制图像的缩放方式(三线性等),并且还可以使用更少的内存。您可以覆盖 OnMouseMove 以获取鼠标移动

    【讨论】:

    • 你可能是对的。但我一直在寻找快速且无代码的东西。提到的解决方案对我有用。
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2018-03-03
    相关资源
    最近更新 更多