首页
社区
课程
招聘
[旧帖] [求助]Direct3D截图 0.00雪花
发表于: 2013-3-12 11:37 1864

[旧帖] [求助]Direct3D截图 0.00雪花

2013-3-12 11:37
1864
概述项目:我打算截取windows media player播放视频的图片,于是我通过Com Hook技术已经成功截到Direct3DCreate9Ex和Direct3DCreate9Ex::CreateDeviceEx两个函数的执行,通过调试我知道这两个函数被执行了一次,所以可以确定只创建一个设备,并且这个设备只有一个8*8像素的像素的后台缓冲区。  我认为WMP是运行时后先把数据绘制到后台缓冲区,然后再present显示,在视频播放过程中,我可以随时获取视频帧数据。想象是美好的,现实是每次我只能够截取到  8*8 黑色图片。我承认我的想法太天真了,希望对这方面有研究的人,站出来帮帮我

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 57
活跃值: (145)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
其实我觉得printwindow更方便好用
2013-3-12 11:47
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这种方式不行哇,当程序被遮挡时候,就不能截图了
2013-3-12 12:26
0
雪    币: 57
活跃值: (145)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
。。。。。。printwindow截图是比较好用的,只要窗口不是最小化就行,你说的程序被遮挡以及超出屏幕都可以截。
2013-3-12 12:58
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢你的回答,不过你说的方法适合在关闭DirectDraw加速的情况啊,视频数据被绘制到DC上的情况,而WMP是利用directDraw加速的,这种方法不行。它是直接操作显存,在显存中输入数据。我是这样认为的,有问题的话,请指正
2013-3-12 13:10
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
求做过相关项目的高手帮忙下。。。
2013-3-12 13:35
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
在顶一下
求高手啊
2013-3-12 14:00
0
雪    币: 57
活跃值: (145)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
可能是我没理解你的意思,但是如果你只是想截WMP播放的视频截图,我不明白,你为什么不去掉视频加速功能再截,那样是可以的;如果视频文件在本地,那也可以直接利用AxWMPLib获取想要的你想要的任意帧,也是可以成功截的,这两种方法我都试过了都可以正常截。
2013-3-12 14:38
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
捕捉-〉处理-〉呈现,你的想法没有问题,建议仔细看看实现代码,是不是capture对象的参数设置错了
2013-3-12 15:52
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢你的帮助,要求就是对正在播放的WMP播放器进行屏幕截图(播放器有一定的透明度,直接通过DC截取的话也会透明),所以想通过Hook com技术截取Direct3D底层数据,实现视频截屏。顺便请问一下,你说关闭视频加速功能,是如何关闭的,可以在进程内关闭,不影响其他程序么?我已经找了很久资料了,都没有找到,郁闷 。
2013-3-12 15:56
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我仔细看了看,也没有什么问题。我在想wmp的视频渲染是不是没有通过它自己创建的后台缓冲区,因为那个缓冲区是:8*8的。如果没有通过这个缓冲区,它又会通过那些方法呢?并且,我还截取IDirect3DDevice::present函数,但是这个函数没有被执行过....
2013-3-12 16:03
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
做过游戏截图的来看看哇
2013-3-12 17:36
0
雪    币: 57
活跃值: (145)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
WMP 工具-选项-性能-视频加速-无,不过这样像你说的跟播放器的透明效果肯定是一样的。

2013-3-13 08:45
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
嗯,谢谢哈。我知道怎么解决了,我把IDirect3DDevice9Ex可能调用的函数全部截取了一遍,找到了原因了。
Media Foundation(DirectShow进化而来)不知道怎么创建了另外的Device。然后通过其他的Device创建后备缓冲区的。
2013-3-13 15:34
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢楼上所有回答的人,要结贴了
2013-3-13 15:35
0
游客
登录 | 注册 方可回帖
返回
//