因为avi要定位到帧,我用了WindowsMediaPlayer控件,但是如何在我的程序里截屏把控件里把某帧图像取出保存呢?1、还不了解avi格式(vb直接去文件里去是不是难了点)
2、好像directshow好像就能用一次,一定要用这个麻烦的东西去取吗,我还不懂directx
3、wmp播放时用ctrl+i就可以保存图像,俺不会用调试工具,要不进去看看到底用了什么API之类的。

解决方案 »

  1.   

    这个不难!抓取WMP控件正在播放的某帧图像:
    1、先找到播放图像的句柄(这玩意儿要加载了视频才能找到):WmphWnd=FindWindowEx(Me.hWnd,0,"WmpVideoWindow","WmpVideoWindow")
    2、确定抓取区域
    3、用API抓图并保存
      

  2.   

    WMPhWnd = FindWindowEx(Me.hwnd, 0, "WmpVideoWindow", "WmpVideoWindow")lDC=GetDC(WMPhWnd)BitBlt Me.hDC, 0, 0, Screen.Width, Screen.Height, lDC, 0, 0, vbSrcCopy不行啊!!
      

  3.   

    BitBlt只能抓GDI,不能抓Directshow
      

  4.   

    BitBlt用hDC,wmp用了Directshow所以不行
      

  5.   

    BitBlt用hDC,wmp用了Directshow所以不行
      

  6.   

    好像不能用一般的方法来抓视频的图片吧…………如果只是AVI还不如用将AVI拆成BMP的方法…………不太懂,等待高手,抓视频和DX的图片的方法我也很想知道…………
      

  7.   

    AVI拆成BMP的方法那些该死的avixxx函数怎么用啊?
      

  8.   

    早就知道视频果然麻烦,用会声会影捕获的avi别的软件不是打不开,就是像被风刮了一样(拖虚影),但是在WindowsMediaPlay就正常放,真是邪了,但是截屏图也是虚的!!!现在又发现有什么type1,type2的问题,真是烦啊。VB那个"AVI to BMP"根本打不开这个avi,但是别的avi就正常。疯了!!!
      

  9.   

    再继续讨论.....我就不相信除了我就没有其他人能解决此问题, 我唯一的想法就是 "人性的自私", 无语....我的方法并不完美, 但可以轻松解决你视频抓图, win2000系统甚至于还可以保存为.jpg 速度快不占空间.我还在等更完美的方法.... 我的代码暂不公开, 否则csdn的VB版不会进步.效果图:http://p.blog.csdn.net/images/p_blog_csdn_net/cbm666/366646/o_SaveVideo.jpg 
      

  10.   

    楼主请上QQ来找我, 我免费教你, 因我自认我的方法还不完美, 还想学到更好的方法.QQ 138449666
      

  11.   

    4F 你已摸到重点了.将Windows占用的 DirectDraw 与 Direct3D 屏蔽禁止掉即可, 我之所以说不完美的地方是这样做有可能会影响到windows系统其它多媒体的运行, 所以我还在找SaveVideo完事后如何灰复它不禁用的方法.
      

  12.   

    取消了视频directshow和视频覆盖,截取的图像质量大幅下降!
    已经查到可能跟avi2的格式有关!视频是麻烦啊,avifile这些api好像只能处理avi1!