C#绘图程序闪烁

Joh*_*erg 5 c# graphics gdi+ paint bitmap

我正在尝试用C#制作一个简单的绘图程序,但是当我绘图时它会一直闪烁,就像我需要某种双缓冲一样,但我不知道该怎么做.

我正在绘制一个Panel,我正在使用a Bitmap来存储图形.

这是我的代码:

public partial class Form1 : Form
{
    private Bitmap drawing;
    private bool leftDown = false;
    private int prevX;
    private int prevY;
    private int currentX;
    private int currentY;

    public Form1()
    {
        InitializeComponent();

        drawing = new Bitmap(panel1.Width, panel1.Height);
    }

    private void panel1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            leftDown = true;

            prevX = e.X;
            prevY = e.Y;
        }
    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if (leftDown)
        {
            Graphics g = Graphics.FromImage(drawing);

            currentX = e.X;
            currentY = e.Y;

            g.DrawLine(new Pen(Color.Black), new Point(currentX, currentY), new Point(prevX, prevY));
            panel1.Invalidate();

            prevX = currentX;
            prevY = currentY;

            g.Dispose();
        }
    }

    private void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        leftDown = false;
    }

    private void panel1_MouseLeave(object sender, EventArgs e)
    {
        leftDown = false;
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawImageUnscaled(drawing, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*z M 5

你不仅应该把DoubleBufferedtrue的,但也可以使用PictureBox,而不是Panel和借鉴它。这应该可以解决您的问题:)。