没有试过你试一下lScreen=GetDC(0)
Bitblt pic.hDC,0,0,w,h,lScreen,0,0,800,600,SRCCOPY
REleaseDC 0,lScreen

解决方案 »

  1.   

    楼上的方法不行!
    因为mediaplayer默认是用硬件加速的OVERLAY方式播放的(目前几乎所有显卡都支持这种方式),而OVERLAY是无法抓图下来的。你得想办法让mediaplayer不用OVERLAY方式播放才能抓下来!
    但mediaplayer没有可以设置播放方式的地方。
    我有一个简单但有效的办法,就是多开几个mediaplayer,直到OVERLAY的显存不够了,mediaplayer就会自动切换到BLT方式播放,这时就可以抓图了!!
      

  2.   

    你多加几个mediaplayer控件or用一个mediaplayer控件数组运行时用load mediaplayer(index)多load几个。只留一个用来播放(真的),把其他的(假的)Visible=Flase,Mute=Flase。
    然后播放时把所有的mediaplayer都设好FileName都播放,注意真用来播放的mediaplayer最后.play,然后立即把假的.stop。只要够多(视显卡显存而定),最后.play的真mediaplay就会显存不够切换到BLT方式!象我的VOODOO5 64M只要四个就够了!以下代码例:'需四个mediaplayer,mediaplayer4用来播放
    Option ExplicitPrivate Sub Form_Activate()MediaPlayer1.Move -100, -100, 0, 0'很奇怪MediaPlayer的
    MediaPlayer2.Move -100, -100, 0, 0'Visible不起作用,所以
    MediaPlayer3.Move -100, -100, 0, 0'用这种方法隐藏
    MediaPlayer1.Mute = False
    MediaPlayer2.Mute = False
    MediaPlayer3.Mute = False
    MediaPlayer1.AutoStart = False
    MediaPlayer2.AutoStart = False
    MediaPlayer3.AutoStart = False
    MediaPlayer4.AutoStart = False
    MediaPlayer1.filename = "g:\movie\matrix\matrix a.avi" '设为你的文件
    MediaPlayer2.filename = "g:\movie\matrix\matrix a.avi"
    MediaPlayer3.filename = "g:\movie\matrix\matrix a.avi"
    MediaPlayer4.filename = "g:\movie\matrix\matrix a.avi"
    MediaPlayer1.Play
    MediaPlayer2.Play
    MediaPlayer3.Play
    MediaPlayer4.Play
    MediaPlayer1.Stop
    MediaPlayer2.Stop
    MediaPlayer3.StopEnd Sub
    你可以用printscrn键抓图来判断是否切换到BLT方式了。如果没有,是无法抓下正在播放的图像的,那就再多加几个mediaplayer。搞定BLT方式播放,抓图就简单了,用Bitblt抓到picture控件然后savepicture保存就OK!