在使用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)); }
本人做的是在一个窗体上实时刷新大量数据的功能,相关代码已经简化。
文章评论