急!如何使用directshow将任何AVI逐帧分解为位图
希望将一个avi文件打开并取出每一帧图像,得到位图格式数据后要传递给其它模块作图像处理。本人对directshow不熟悉,使用vfw时又发现有些编码的avi文件打开时有问题。希望高手指教! 问题点数:100、回复次数:8Top
1 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-07-14 00:53:46 得分 30
这就是播放器啊
DXSDK里面有sample的Top
2 楼jason20042008(Jason)回复于 2006-07-14 23:03:44 得分 0
我本来有一个direct3d的工程,想把directshow加进去,参考了VMR9中vmr9allocator的例子,程序本来已经有d3d和d3ddevice的对象指针了,但是传给allocator后vmr不能正常工作,让vmr自己创建新的d3ddevice可以听到声音播放正常,可是texture上没有图像(不知是否是我显示时没做好)。Top
3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-07-14 23:04:32 得分 30
使用Filter:ISampleGrabber,或自己构建一个Transform Filter.Top
4 楼wwwllg(野蛮人)回复于 2006-07-15 08:35:29 得分 30
在你的graph中接一个graber,播放这个文件,在回调中存为图片文件.Top
5 楼jason20042008(Jason)回复于 2006-07-15 11:52:07 得分 0
能给一个接grabber还能播放音频的例子吗?sdk sample里面只有简单的例子不能播放同步的声音。谢谢各位了,感激不尽!Top
6 楼jason20042008(Jason)回复于 2006-07-15 20:26:37 得分 0
有些眉目了,加一个samplegrabber、source和nullrenderer,connect到一起,对于avi文件来说找到avisplitter filter,render那个未连接的pin,这样音频也可以同时播放了,使用回调方式让grabber每次有sample时通知我,再把位图贴到d3d材质上去,方法笨一些,还没把代码整合到一起,不知道好不好使。不知各位有没有什么好的建议。感觉directshow做得很灵活,反过来带来的问题是对于不了解的人上手很困难。摆弄了两天才稍稍有些眉目了。那个graphedit挺有用处,让我少费了不少功夫。Top
7 楼jason20042008(Jason)回复于 2006-07-16 14:18:48 得分 0
又遇到了问题,程序运行结束后进程并没有终止。我觉得可能是directshow的线程没有结束造成的,可是我已经把graph stop了,而且也release了。Top
8 楼lulubei()回复于 2006-07-17 09:38:25 得分 10
很简单啊 IMediaSeeking *mSeeking; mSeeking->SetTimeFormat(&TIME_FORMAT_FRAME)
设置成video按帧播放 然后再实时抓图 就可以将video的每一帧图片抓取下来了Top




