C# winform的avi处理问题

neu_ZZM 2019-05-13 10:01:20
现在用winform做了avi按帧读取,然后显示出来。结果现在读取到71帧的时候,就会读取失败。试过了很多数据都是这样。ORZ,怀疑是内存不足了,可是又不知道怎么处理。
avi处理用的是https://www.cnblogs.com/qc-id-01/p/7494757.html这个网站里的方法。
具体代码如下

上面的方法是获取视频总帧数的,下面的方法是读取每一帧的。现在用一个定时器来触发下面这个方法,定时器定的时间是50ms,但是时间应该不是问题,因为就算时间设定是500ms也会在同样的地方停止。
具体出问题的是下面方法里的bool flag = aviStream.GetFrameOpen();这句代码,当处理到71帧的时候,这个函数会返回false,说明打开失败。而且这个函数用了dll文件里的函数,根本无法知道里面是怎么运行的。
...全文
296 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
neu_ZZM 2019-05-30
  • 打赏
  • 举报
回复
经过一段时间的研究发现,只要把1楼代码中229行那句话去掉,就能继续运行了,看来那句话只要运行一次,之前在取视频总帧数的时候已经运行一次了,就不用重复运行了。重复运行这句话可能会导致内存溢出。而其他的什么bitmap之类的虽然是非托管(应该是叫这名吧),但是不dispose也没事
neu_ZZM 2019-05-16
  • 打赏
  • 举报
回复
引用 1 楼 杀马特丶蛮牛 的回复:
每次调用都new一个avimanager吗?尝试不要每次都new一个试下

试过了...不行,把new移到外面了,还是同样的问题
平底锅锅锅 2019-05-14
  • 打赏
  • 举报
回复
定时器?用事件触发,线程处理。
neu_ZZM 2019-05-14
  • 打赏
  • 举报
回复
引用 2 楼 平底锅锅锅 的回复:
定时器?用事件触发,线程处理。

我的确是用定时器做的,每次定时器触发的时候都显示一张图片,不过没新建线程,具体方法在下面这个帖子里,如果方便的话也帮忙看一下提一下建议么。
https://bbs.csdn.net/topics/392606124
杀马特丶蛮牛 2019-05-13
  • 打赏
  • 举报
回复
每次调用都new一个avimanager吗?尝试不要每次都new一个试下

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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