使用Windows窗体图形绘制笔画-需要改进性能

本文关键字:性能 笔画 Windows 窗体 图形 绘制 使用 | 更新日期: 2023-09-27 17:50:11

我有一个Panel,我需要用鼠标绘制一些Stroke。我的笔画只是Point s的列表,我使用鼠标事件添加它们。下面是我的代码:

private void Panel_MouseDown(object sender, MouseEventArgs e)
{
    isDrawing = true;
    currStroke = new Stroke(new Pen(Color.Black, 2));
    currStroke.Points.Add(e.Location);
    visuals.Add(currStroke);
}
private void Panel_MouseMove(object sender, MouseEventArgs e)
{
    if (isDrawing)
    {
        currStroke.Points.Add(e.Location);
        Invalidate(false);
    }
}
private void Panel_MouseUp(object sender, MouseEventArgs e)
{
    isDrawing = false;
}

我重写了OnPaint方法,我绘制所有的visuals,特别是绘制笔画,我使用以下代码:

e.Graphics.DrawLines(stroke.Pen, stroke.Points.ToArray());

它的工作原理,但我当我画我的面板闪烁,这是我可以看到我的面板出现和消失得很快。这可能是由于连续调用Invalidate()方法。

是否有任何解决方案,以提高性能和消除闪烁效果?

使用Windows窗体图形绘制笔画-需要改进性能

您应该将控件的DoubleBuffered属性设置为true

从链接:

缓冲图形可以减少或消除由显示表面部分的逐步重画引起的闪烁。缓冲图形要求首先将更新的图形数据写入缓冲区。图形缓冲区中的数据随后被迅速写入显示的表面存储器。显示图形内存的相对快速切换通常会减少可能发生的闪烁。