为什么当我用鼠标拖动图片框中的图像时,它会将图像恢复为原始大小?

时间:2013-12-05 22:49:33

标签: c# winforms

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

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

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

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. 如果我首先使用鼠标滚轮并使图像尺寸更小或更大,然后尝试拖动它一次我点击图像拖动它(鼠标向下)或当我离开它(鼠标向上)图像将其大小改回其ogirinal大小。我希望它保持在我拖动它时用鼠标滚轮改变它的大小。

  3. 我如何解决这两个问题?

1 个答案:

答案 0 :(得分:0)

  1. 当您选中复选框时设置平移模式 - 只需摆脱该处理程序 - 就这样。因为您在mouseDown处理程序中也设置了平移模式 - 基于checkBox状态。

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