|
|
Posted on
2006-09-12 16:31
胖在一方
阅读( 651)
评论()
收藏
举报
为了能清楚的对比应用双缓冲技术前后的效果,我编写了一段程序来进行测试。首先,我创建了一个普通的Windows Application,在主Form中,我放置了一个定时器:timer1,然后将它的Interval属性设置为10,然后在Form上放置两个按纽,分别用来控制定时器的开启和关闭,最后,我还放置了一个label控件,用来显示绘图的帧数。
'----------------------------------------------------------------
' 不使用双缓冲的代码,能明显的看到一条扫描线,从左到右,帧数为 2
'----------------------------------------------------------------
'开始的时间
Dim t1 As DateTime = DateTime.Now
Dim g As Graphics = Me.CreateGraphics()
Dim brush As Brush
If flag Then '不停的变化颜色
brush = New LinearGradientBrush(New PointF(0.0F, 0.0F), New PointF(500.0F, 500.0F), Color.Red, Color.Green)
flag = False
Else
brush = New LinearGradientBrush(New PointF(0.0F, 0.0F), New PointF(500.0F, 500.0F), Color.Green, Color.Red)
flag = True
End If
'输出图形
Dim i, j As Integer
For i = 0 To 60
For j = 0 To 60
g.FillEllipse(brush, i * 10, j * 10, 10, 10)
Next
Next
Dim t2 As DateTime = DateTime.Now
Dim span As TimeSpan = t2.Subtract(t1)
Me.lblZS.Text = 1000 / span.Milliseconds

'------------------------------------------------------------
'使用双缓冲代码
'------------------------------------------------------------
Dim t1 As DateTime = DateTime.Now [color=Green]'开始时间
Dim bmp As New Bitmap(500, 500)
Dim g As Graphics = Graphics.FromImage(bmp)
Dim brush As Brush
If flag Then '不停的变化颜色
brush = New LinearGradientBrush(New PointF(0.0F, 0.0F), New PointF(500.0F, 500.0F), Color.Red, Color.Green)
flag = False
Else
brush = New LinearGradientBrush(New PointF(0.0F, 0.0F), New PointF(500.0F, 500.0F), Color.Green, Color.Red)
flag = True
End If
'输出图形
Dim i, j As Integer
For i = 0 To 60
For j = 0 To 60
g.FillEllipse(brush, i * 10, j * 10, 10, 10)
Next
Next
Me.CreateGraphics().DrawImage(bmp, 0, 0)
Dim t2 As DateTime = DateTime.Now '结束时间
Dim span As TimeSpan = t2.Subtract(t1)
Me.lblZS.Text = 1000 / span.Milliseconds
'----------------------------------------------------------------------------------------------------------------
'使用双缓冲代码,没有看到扫描线,而且速度提高到11,
'绘制图形很消耗系统资源,如果要绘制的图形很多的话,系统开开销很大,会出现刷新缓慢的效果,
'
'而使用双缓冲代码则没有这个问题,道理是先在内存中开辟一个虚拟的画布,先在这个画布上绘制图形,然后在把这个画布一次
'性的绘制到屏幕上去,系统的开销不是很大。
'
'具体的步骤描述
' 1、在内存中建立一个虚拟的画布
' Dim bmp As New Bitmap(500, 500)
' 2、获取这个画布的Graphics的引用
' Dim g As Graphics = Graphics.FromImage(bmp)
' 3、在这个画布上绘制图形
' g.FillEllipse(brush, i * 10, j * 10, 10, 10)
' 4、将这个画布绘制到屏幕上去
' Me.CreateGraphics().DrawImage(bmp, 0, 0)
'----------------------------------------------------------------------------------------------------------------


|