试图在C#中模仿MS Paint,无法使用橡皮筋

时间:2012-10-03 03:43:55

标签: c# bitmap draw paint

我正在尝试模仿MS Paint中的效果,当绘制一个形状时,它会在鼠标停止时在屏幕上“预览”。

非常简单:

    private Bitmap lastCanvas;                

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
         lastCanvas = new Bitmap(pictureBox1.image);

         gr = Graphics.FromImage(pictureBox1.Image);

         start = e.Location;
         gr.DrawRectangle(myPen, start.X, start.Y, 0, 0);
         pictureBox1.Refresh();
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {   
        if (e.Button == MouseButtons.Left)
        {
            pictureBox1.Image = lastCanvas;

            gr = Graphics.FromImage(pictureBox1.Image);

            gr.DrawRectangle(myPen, start.X, start.Y, e.Location.X - start.X, e.Location.Y - start.Y);
            pictureBox1.Refresh();
        }
    }

问题是它似乎没有正确存储“lastCanvas”。这是尝试获取到目前为止绘制的所有内容并存储它,以便在鼠标拖动发生时,我可以在绘制矩形“预览”之前重绘它。出于某种原因,我不能让位图复制和重新显示,我只是在屏幕上建立所有“预览”矩形,尽管事实上我正在保存旧画布并在每次鼠标移动之间恢复它。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为发生的事情是pictureBox1lastCanvas在您的pictureBox1_MouseMove事件处理程序中引用相同的内容。

此代码将图像和lastCanvas设置为内存中的同一对象

pictureBox1.Image = lastCanvas;

当您将图像绘制到您创建的Graphics对象时,您还要更新lastCanvas。您可能需要Clone位图。