【问题标题】:Resizing bitmap in PictureBox在 PictureBox 中调整位图大小
【发布时间】:2018-01-12 21:04:55
【问题描述】:

我正在尝试正确放大/缩小 PictureBox 中的图像。 我有这个代码。

private Image GridMap;
private double ZoomFactor = 1;
protected override void OnMouseWheel(MouseEventArgs e)
{
    if (e.Delta > 0)
    {
        ZoomFactor*=1.2;
    }

    else if (e.Delta < 0 && ZoomFactor >1 )
    {
        ZoomFactor /= 1.2;
    }

    Size newSize = new Size((int)(GridMap.Width * ZoomFactor), (int)(GridMap.Height * ZoomFactor));
    Bitmap bmp = new Bitmap(GridMap, newSize);
    MainGrid.Image = bmp;
}

MainGrid 是我要缩放的 PictureBox。

此代码有效,但滚动后非常慢,我等待 1-2 秒,然后显示放大的图片。与 (800,800) 图像。这非常慢。

我想我知道为什么。它复制调整大小的位图,而不是只使用旧位图的一部分,但我不知道该怎么做。

如何使它平滑缩放?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    好的,最后我想通了... 我需要的是剪掉我的位图最终代码>

    protected override void OnMouseWheel(MouseEventArgs e)
        {
    
            if (e.Delta > 0 && ZoomFactor >MaxZoom)
            {
                ZoomFactor-=0.01;
            }
    
            else if (e.Delta < 0 && ZoomFactor <1 )
            {
                ZoomFactor += 0.01;
            }
    
            Rectangle srcRect = new Rectangle(0, 0, (int)(GridMap.Width * ZoomFactor), (int)(GridMap.Height * ZoomFactor));
            Bitmap cropped = ((Bitmap)GridMap).Clone(srcRect, MainGrid.Image.PixelFormat);
            MainGrid.Image = cropped;
        }
    

    加上用

    启动PictureBox
    this.MainGrid.SizeMode = PictureBoxSizeMode.Zoom;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-07
      • 2013-08-01
      • 1970-01-01
      • 2012-03-23
      • 2011-08-25
      相关资源
      最近更新 更多