GDI+ 绘图闪烁解决方法
2014-05-05 09:30
225 查看
闲着没事,准备做一个类似于TeeChart的自定义控件,结果第一步的绘图就把我给难倒了,虽然早就知道GDI绘图的闪烁问题很坑,但是却没有想到如此之坑,折腾了两天,才找到解决方法。
首先在窗体加载的时候,加入双缓存,说实话以前一直没觉得这个双缓存有什么用,不过这次总算是有了点儿效果。
下面是一个例子,我准备画一个简单的坐标系。这个方法会获得一个自定义的位图,将这个位图直接赋值给窗体的背景图片,或者PictureBox控件也可以。
我这里是直接在重绘方法里面给背景图片直接赋值了。
做完这些之后,我惊讶的发现GDI绘制出的图居然不闪了。当然了,这个方法的可移植性还不太清楚,欢迎大家讨论。
首先在窗体加载的时候,加入双缓存,说实话以前一直没觉得这个双缓存有什么用,不过这次总算是有了点儿效果。
DoubleBuffered = true; SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);
下面是一个例子,我准备画一个简单的坐标系。这个方法会获得一个自定义的位图,将这个位图直接赋值给窗体的背景图片,或者PictureBox控件也可以。
/// <summary> /// 绘制界面 /// </summary> private Bitmap DrawGDI() { var bmp = new Bitmap(Width, Height); var pen = new Pen(Color.Black, 1.0f); Graphics g = Graphics.FromImage(bmp); var p1 = new Point(20, 10); var p2 = new Point(20, Height - 25); var p3 = new Point(Width - 10, Height - 25); g.DrawLines(pen, new[] { p1, p2, p3 }); g.DrawString("0", Font, Brushes.Black, 10, Height - 20); return bmp; }
我这里是直接在重绘方法里面给背景图片直接赋值了。
/// <summary> /// 重绘 /// </summary> protected override void OnPaint(PaintEventArgs e) { BackgroundImage = DrawGDI(); base.OnPaint(e); }
做完这些之后,我惊讶的发现GDI绘制出的图居然不闪了。当然了,这个方法的可移植性还不太清楚,欢迎大家讨论。
相关文章推荐
- C# 绘图中的图片闪烁问题解决方法的使用结果
- 如何使用 GDI+ 双缓冲 解决绘图闪烁问题
- 利用CMemDC画图的两种方法(解决绘图闪烁)
- 使用 GDI+ 双缓冲 解决绘图闪烁问题
- power point2003中播放幻灯片无法使用绘图笔指针的解决方法
- 解决绘图中闪烁的问题(ZT)
- winform 中用IrisSkin2 皮肤后,鼠标在窗体移动会有闪烁,GroupBox不停的闪烁 解决方法
- VC窗口启动隐藏时闪烁问题解决方法
- MFC中屏幕刷新闪烁问题解决方法总结
- 【Visual C++】Windows GDI贴图闪烁解决方法
- Web控件TreeView展开无闪烁的解决方法
- Windows GDI画图闪烁解决方法 双缓冲技术
- jquery mobile 页面转场或结束时有页面闪烁问题解决方法
- 微软爆出的GDI+图片漏洞,360给出解决方法
- C# WinForm页面切换导致闪烁的解决方法
- Window Mobile中Panel上绘图的闪烁消除方法
- 【Visual C++】Windows GDI贴图闪烁解决方法
- 关于生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法
- C#Winform频繁刷新导致界面闪烁解决方法