我正在尝试模仿 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”。这是一种尝试将到目前为止绘制的所有内容并存储起来,以便在发生鼠标拖动时,我可以在绘制矩形“预览”之前重新绘制它。由于某种原因,我无法复制和重新显示位图,尽管事实上我正在保存旧画布并在每次鼠标移动之间恢复它,但我只是在屏幕上构建了所有“预览”矩形。
任何帮助表示赞赏。