VB.net绘图具体如何设置双缓冲
由于绘图刷新造成闪烁,搜索大家都说双缓冲,微软官方也说双缓冲可以解决。但都就说使用下面就行:DoubleBuffered=True可是这句话放在哪才会生效啊,如何使用才会...
由于绘图刷新造成闪烁,搜索大家都说双缓冲,微软官方也说双缓冲可以解决。但都就说使用下面就行:DoubleBuffered = True
可是这句话放在哪才会生效啊 ,如何使用才会生效啊?如果只是放在绘图语句前面,该闪还是闪啊?求一个具体的例子,比如绘制一个正弦波,40ms刷新一次,如何设置能不闪烁???
下面附上:闪烁的代码
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim g As Graphics = PictureBox1.CreateGraphics
Dim a As Integer
For a = 0 To 400
pt(a).X = a
pt(a).Y = 150 - 100 * Math.Sin(2 * 3.14159 * a / 200 )
Next
PictureBox1.Refresh()
g.DrawLine(Pens.Blue, 0, 150, 400, 150)
g.DrawLine(Pens.Blue, 200, 0, 200, 300)
g.DrawCurve(Pens.Red, pt)
End Sub 展开
可是这句话放在哪才会生效啊 ,如何使用才会生效啊?如果只是放在绘图语句前面,该闪还是闪啊?求一个具体的例子,比如绘制一个正弦波,40ms刷新一次,如何设置能不闪烁???
下面附上:闪烁的代码
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim g As Graphics = PictureBox1.CreateGraphics
Dim a As Integer
For a = 0 To 400
pt(a).X = a
pt(a).Y = 150 - 100 * Math.Sin(2 * 3.14159 * a / 200 )
Next
PictureBox1.Refresh()
g.DrawLine(Pens.Blue, 0, 150, 400, 150)
g.DrawLine(Pens.Blue, 200, 0, 200, 300)
g.DrawCurve(Pens.Red, pt)
End Sub 展开
2个回答
展开全部
VB.NET画图是不能设置双缓冲的,双缓冲是指窗体,从来没说是针对控件。
不用graphic.clear清理重画就不会闪烁。你可以先把容器删了再重新建立一个再去画。
简单举例:
Graphics g;
Pen p;
Panel pl;
构造函数初始化:
p=new Pen(Color.Red,2);
pl=panel1;
造成闪烁的画法:
g=pl.CreateGraphics();
g.Clear(SystemColor.ButtonFace);
//.....画新的
不会闪烁的办法:
this.Controls.ReMoveAt(panel1);
pl=new Panel();
pl.Name="panel1";
//....创建容器控件
this.Controls.Add(pl);
//继续画
不用graphic.clear清理重画就不会闪烁。你可以先把容器删了再重新建立一个再去画。
简单举例:
Graphics g;
Pen p;
Panel pl;
构造函数初始化:
p=new Pen(Color.Red,2);
pl=panel1;
造成闪烁的画法:
g=pl.CreateGraphics();
g.Clear(SystemColor.ButtonFace);
//.....画新的
不会闪烁的办法:
this.Controls.ReMoveAt(panel1);
pl=new Panel();
pl.Name="panel1";
//....创建容器控件
this.Controls.Add(pl);
//继续画
2016-10-20
展开全部
Try this:
Public Sub EnableDoubleBuffering()
' Set the value of the double-buffering style bits to true.
Me.SetStyle(ControlStyles.DoubleBuffer _
Or ControlStyles.UserPaint _
Or ControlStyles.AllPaintingInWmPaint, _
True)
Me.UpdateStyles()
End Sub
追问
这个函数是在哪里面调用吗?如果在我上面的timer_tick调用,还是无改善。另外我是在picturebox里绘的图,看到了吗?
追答
在你的 picturebox 所在窗体的初始化代码中调用一次即可。
这段代码复制自微软的MSDN。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询