有什么方法能提升绘图速度吗?

六零道长 2016-12-02 08:56:44
最近在做一个图形界面 要显示几百张图片而且还要不停刷新 但是 for i as long = 1 to XXX 之后发现DrawImage的速度很慢 没办法快速描绘完所有图片 导致显得整个界面卡顿特别严重 有什么解决方法吗?
...全文
574 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
linsn007 2016-12-21
  • 打赏
  • 举报
回复
多开几个线程呢? 每个线程只负责一定数量的图片刷新,会不会好点?
123工艺品 2016-12-03
  • 打赏
  • 举报
回复
11111 几百张?太吓人了。 把界面贴出来我看看
Tiger_Zhao 2016-12-02
  • 打赏
  • 举报
回复
每次直接向界面绘图都会引起刷新,而刷新太频繁就会导致卡/闪烁之类的问题。
1)使用绘图缓冲区
2)使用 Time1 控件控制刷新频率
Public Class Form1

Private bufImage As Bitmap = Nothing '缓冲区'
Private isNewDraw As Boolean = False

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
bufImage = New Bitmap(PictureBox1.Width, PictureBox1.Height) '假定输出控件为PictureBox1。'
Timer1.Interval = CInt(1000 / 18) '18帧/秒'
'Timer1.Enabled = True
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Graphics.FromImage(bufImage)
For i As Long = 1 To XXX
'通过 g 在缓冲区中画图'
Next

isNewDraw = True '无论绘图多么频繁,只设置更新标志,一个周期内的绘图最终只刷新一帧。'
End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If isNewDraw Then
PictureBox1.Image = New Bitmap(bufImage)
isNewDraw = False '清除标志,后面的帧如果没有绘图就不用刷新了。'
End If
End Sub

End Class
by_封爱 2016-12-02
  • 打赏
  • 举报
回复
换内存 换显卡 实在不行 换语言....用php做
Tiger_Zhao 2016-12-02
  • 打赏
  • 举报
回复
图片载入太慢?
预先把图片缩小到显示大小。
预先载入全部图片。
六零道长 2016-12-02
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao的回复:
每次直接向界面绘图都会引起刷新,而刷新太频繁就会导致卡/闪烁之类的问题。
1)使用绘图缓冲区
2)使用 Time1 控件控制刷新频率
Public Class Form1

Private bufImage As Bitmap = Nothing '缓冲区'
Private isNewDraw As Boolean = False

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
bufImage = New Bitmap(PictureBox1.Width, PictureBox1.Height) '假定输出控件为PictureBox1。'
Timer1.Interval = CInt(1000 / 18) '18帧/秒'
'Timer1.Enabled = True
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Graphics.FromImage(bufImage)
For i As Long = 1 To XXX
'通过 g 在缓冲区中画图'
Next

isNewDraw = True '无论绘图多么频繁,只设置更新标志,一个周期内的绘图最终只刷新一帧。'
End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If isNewDraw Then
PictureBox1.Image = New Bitmap(bufImage)
isNewDraw = False '清除标志,后面的帧如果没有绘图就不用刷新了。'
End If
End Sub

End Class
事实上已经在用这个方法了…… 但卡顿主要是因为drawimage的问题 有没有能提升drawimage速度的方法呢

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧