您的足迹:首页 > DreamSkin >Winform中使用 GDI+双缓冲绘图

Winform中使用 GDI+双缓冲绘图

 QQ截图20160708162453.png

在使用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));
        }

 

本人做的是在一个窗体上实时刷新大量数据的功能,相关代码已经简化。

 

参考作者:http://www.tuicool.com/articles/AzeyIv

本博客所有文章如无特别注明均为原创。作者:cc复制或转载请以超链接形式注明转自 我的博客
原文地址《Winform中使用 GDI+双缓冲绘图

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)