我编写的是Windows应用程序
用 OnPaint 进行实时绘图的
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics dc = e.Graphics;
//以下是绘图内容
}
由于每秒需要重绘一次图片,所以出现严重的闪烁问题。
主要有3中解决方法
1. 将Form的DoubleBuffered属性设置为true。
改变这个属性后,重绘闪烁问题依然存在。
2. 在构造函数中增加改变控件属性的代码
public From1_From()
{
InitializeComponent();
// 修改属性代码
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
this.UpdateStyles();
}
增加代码后,重绘闪烁问题依然存在。
3. 先将图形绘制到bitmap图片中,在加载这个图片
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
//注意,这里千万不可用Graphics g = this.CreateGraphics() 获得绘图变量。否则闪烁将非常厉害。
Bitmap b = new Bitmap(this.Width, this.Height);
Graphics dc = Graphics.FromImage((System.Drawing.Image)b);
//将要绘制的内容绘制到dc上
g.DrawImage(b, 0, 0);
dc.Dispose();
}
使用这种方法后,重绘闪烁问题得到很好的解决,推荐使用这种方法。