使用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()
方法。
是否有任何解决方案,以提高性能和消除闪烁效果?
您应该将控件的DoubleBuffered属性设置为true
。
从链接:
缓冲图形可以减少或消除由显示表面部分的逐步重画引起的闪烁。缓冲图形要求首先将更新的图形数据写入缓冲区。图形缓冲区中的数据随后被迅速写入显示的表面存储器。显示图形内存的相对快速切换通常会减少可能发生的闪烁。