6

我正在开发一个应用程序,但我遇到了一个我似乎无法找到解决方案的问题。该应用程序是用 vc++ 编写的。我需要做的是显示一个带有文本的 YUV 视频源。

现在它可以通过使用 GDI 在 OnPaint 方法中绘制文本和 DirectDraw 叠加层上的视频正常工作。我需要摆脱覆盖,因为它会导致很多问题。它不适用于某些视频卡、vista、7 等。

我想不出一种以更兼容的方式完成同一件事的方法。我可以使用带有后台缓冲区的 DirectDraw 绘制视频并将其复制到主缓冲区就可以了。这里的问题是在 GDI 中绘制的文本会因为视频刷新的次数而闪烁。如果可能的话,我真的很想保持代码完整地绘制文本,因为它运行良好。

有没有办法将文本直接绘制到 DirectDraw 缓冲区或内存缓冲区或其他东西,然后将其 blt 到后台缓冲区?我应该一起看另一种方法吗?两个重要的操作系统是 XP 和 7。如果有人有任何想法,请告诉我,我将对其进行测试。谢谢。

4

2 回答 2

2

尝试在 microsoft.com 上查看 DirectShow 和 Ticker 示例:

DirectShow 代码示例

此示例使用视频混合渲染器来混合视频和文本。它使用 IVMRMixerBitmap9 接口将文本混合到视频窗口的底部。

DirectShow 用于构建用于播放音频或视频流的过滤器图,并为不同的效果和视频和音频样本的操作添加不同的过滤器。

于 2010-02-16T05:37:46.960 回答
1

除了使用 DirectShow 的 Video Mixing Renderer,您还可以使用ISampleGrabber接口。优点是,它是一个过滤器,也可以与其他渲染器一起使用,例如,当不在屏幕上显示视频而是通过网络将其流式传输或将其转储到文件时。

于 2010-02-16T06:26:00.783 回答