
在使用Winform 中Graphics绘图时候,我们经常会遇到刷新卡顿的情况,这时候建议使用双缓冲来绘图。
首先,解释下双缓冲绘图,很好理解,就是先把要绘制的内容绘制到内存中,再把内存中的图片一次性绘制到界面。
这边使用的方法是,先创建一个同样大小的Bitmap,然后把它作为画布,直接绘制,最后把这个Bitmap打印到窗体上,参看源码:
/// <summary>
/// 绘制
/// </summary>
private void DelegateList_Paint(object sender, PaintEventArgs e)
{
//创建工作区画布大小
Bitmap localBitmap = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
//创建位图实例
Graphics bitmapGraphics = Graphics.FromImage(localBitmap);
//用当前控件的背景色填充
bitmapGraphics.Clear(BackColor);
//抗锯齿呈现图片
bitmapGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
//绘制内容
PaintImage(bitmapGraphics);
//把内存中的图片绘制到控件中
Graphics g = e.Graphics;
g.DrawImage(localBitmap, 0, 0); //在窗体的画布中绘画出内存中的图像
bitmapGraphics.Dispose();
localBitmap.Dispose();
g.Dispose();
}
/// <summary>
/// 双缓冲画图
/// </summary>
/// <param name="g"></param>
private void PaintImage(Graphics g)
{
Brush greyBrush = new SolidBrush(Color.FromArgb(110, 110, 110));
g.DrawLine(new Pen(greyBrush), new Point(15, 70), new Point(135, 70));
g.DrawLine(new Pen(greyBrush), new Point(165, 70), new Point(285, 70));
g.DrawLine(new Pen(greyBrush), new Point(150, 20), new Point(150, 440));
}
本人做的是在一个窗体上实时刷新大量数据的功能,相关代码已经简化。
文章评论