【问题标题】:Why when i drag with the mouse the image in the pictureBox it return the image to its original size?为什么当我用鼠标拖动图片框中的图像时,它会将图像恢复为原始大小?
【发布时间】:2013-12-05 22:49:33
【问题描述】:

在我的代码中,我使用鼠标滚轮调整图片框中的图像大小。

void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
        {
            CalculateNewSizeFactor(e.Delta);
            if (pictureBox1.Image != null) pictureBox1.Image.Dispose();
            pictureBox1.Image = null;
            pictureBox1.Image = ResizeImage(new Size((int)(img.Width * factor), (int)(img.Height * factor)));
        }

        public Image ResizeImage(Size size)
        {
            return new Bitmap(img, size);
        }

        private void CalculateNewSizeFactor(int delta)
        {
            if (delta > 0 && factor < 2)
            {
                factor *= increment;
            }
            else if (delta < 0 && factor > 0.25)
            {
                factor /= increment;
            }
        }

现在我添加了一个新的复选框,所以如果选中它,我可以在图片框内拖动图像:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                panning = true;
            }
        }

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (checkBox1.Checked)
            {
                panning = true;
            }
            startingPoint = new Point(e.Location.X - movingPoint.X,
                                      e.Location.Y - movingPoint.Y);
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            panning = false;
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (panning)
            {
                e.Graphics.Clear(Color.White);
                e.Graphics.DrawImage(img, movingPoint);
            }
        }

有一些问题:

  1. 当我在 pictureBox1 区域内移动鼠标后选中复选框时,它会捕获并拖动图像,我希望它只有在我左键单击鼠标时才会这样做。

  2. 如果我首先使用鼠标滚轮使图像尺寸变小或变大,然后在单击图像拖动它(鼠标向下)或离开它(鼠标向上)时尝试拖动它图像将其大小更改回其原始大小。我希望它保持在我拖动它时用鼠标滚轮更改的大小。

我该如何解决这两个问题?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:
    1. 您在选中复选框时设置了平移模式 - 只需摆脱该处理程序 - 仅此而已。因为您在 mouseDown 处理程序中也设置了平移模式 - 基于复选框状态。

    2. 当您绘制图片框时,您正在绘制 img,这(可能)是您的原始图像。因此,只需将调整大小的图像保存在某处并重新绘制即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 2011-03-16
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      相关资源
      最近更新 更多