对电影播放器,网络游戏画面截图,则显示一片黑,怎么办?

本文分析了DirectShow视频播放软件截图困难的原因,并提供了两种解决方法:一是开启播放窗口后再截图;二是禁用硬件加速功能。详细解释了禁用硬件加速后如何实现DirectShow图像的正常截取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们先来分析一下原因:

这里引用一段话:

对于不少视频播放软件来说,他们都是使用 direct show 来快速显示视频的,这种视频画面,一般的 screen capture 是无法截取的,只能通过一个 hook 来实现对 layer 层的截取,而且效果非常差,对于一个 24ps 的视频,占用 cpu 非常高. (kmp,smplayer,qvod,qq影音都使用 driect show.  但非常奇怪,暴风影音不是使用 direct show(我估计是使用 direct3d 或者opengl ), 可用 print screen 截取的。
    但是,QQ 为什么可以截取呢,它有没有使用 hook 技术呢? 我看过他们的 dll ,应该是没有的,而且使用 hook 的前提是这个钩子(hook)要先于其它程序运行,所以 QQ 不可能使用 hook 技术。那 qq 如何截取 direct show 的图像呢。大家有没有发现,对于在线远程协助,其实是无法看到 direct show 的图像的。而普通的截一个图,这个其实 QQ 是通过禁用 direct show (即 dixdiag 中,禁用 directx 加速来实现的,大家不会写代码的话,可自己禁用  dixrectx 加速试试,是可以截屏的)
究其原因,都是Windows平台下的硬件加速功能惹的祸。

怎么解决这个问题呢?

1、最简单的方法:

比如想截取电影的图片,开一个播放窗口截到的图是一片黑,那我们就再开一个窗口,这时第二个窗口就可以截取到正常的图了。

2、禁用 硬件加速

 右键单击桌面,屏幕分辨率。
点击高级设置。
 单击疑难解答,更改设置,把指针从完全拖到无。
 点击确定。
如果没有以上设置,就说明你的硬件或者驱动不支持硬件加速

在VC++ 6.0环境中,你可以使用MFC(Microsoft Foundation Classes)提供的图形库来绘制树叶形状。以下是步骤概览: 1. **包含头文件**:首先,在你的源代码中添加`afxwin.h`和`afxdraw.h`,它们包含了基本的Windows图形操作函数。 ```cpp #include "stdafx.h" #include <afxwin.h> #include <afxdraw.h> ``` 2. **创建设备上下文**:在窗口的初始化或消息处理函数中,获取DC(Device Context)用于绘画。 ```cpp CDC dc; // 创建设备上下文 if (!dc.CreateCompatibleDC(NULL)) { // 处理错误 } ``` 3. **选择笔刷和颜色**:定义你想要的树叶颜色和画笔样式,例如绿色和自定义线条宽度。 ```cpp HPEN hPen = ::Create Pen(PS_SOLID, 2, RGB(0, 255, 0)); // 绿色线条 HBRUSH hBrush = CreateSolidBrush(RGB(0, 128, 0)); // 深绿填充色 SelectObject(dc, hPen); // 选择笔刷 SelectObject(dc, hBrush); // 选择填充色 ``` 4. **绘制树叶形状**:可以尝试简单的几何形状如三角形,然后通过缩放、旋转和调整顶点位置模拟树叶的自然形态。这里是一个基础的示例,绘制一个等腰三角形作为叶子的基本部分。 ```cpp POINT points[] = {CPixelPoint(10, 10), CPixelPoint(50, 50), CPixelPoint(10, 90)}; dc.Polygon(points, 3); ``` 5. **完善细节**:可以根据需要增加叶脉线,或者使用贝塞尔曲线来实现更复杂的边缘轮廓。还可以改变填充区域的颜色以模拟树叶内部的斑纹或阴影。 6. **保存结果**:如果你希望将绘制的结果显示在窗口上,记得更新窗口的DC到你的绘图DC,并调用`UpdateWindow()`。 7. **清理资源**:完成后,记得释放所创建的笔刷、笔和设备上下文以避免内存泄漏。 ```cpp DeleteObject(hPen); DeleteObject(hBrush); dc.DeleteDC(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值