我正在开发一个应用程序,我遇到了一个问题,我似乎无法找到解决方案。该应用程序是用vc ++编写的。我需要做的是显示一个YUV视频源,其上面有文字。
现在,通过使用GDI和DirectDraw叠加层上的视频在OnPaint方法中绘制文本,它可以正常工作。我需要摆脱叠加层,因为它会导致许多问题。它不适用于某些视频卡,vista,7等。
我无法找到一种以更兼容的方式完成同样事情的方法。我可以使用带有后台缓冲区的DirectDraw绘制视频,并将其复制到主缓冲区就好了。这里的问题是,由于视频刷新的次数,在GDI中绘制的文本会闪烁。我真的希望保持代码尽可能完整地绘制文本,因为它运作良好。
有没有办法将文本直接绘制到DirectDraw缓冲区或内存缓冲区或其他东西然后将其blt到后台缓冲区?我应该一起看另一种方法吗?两个重要的操作系统是XP和7.如果有任何想法让我知道,我会测试它们。感谢。
答案 0 :(得分:2)
尝试在microsoft.com上查看DirectShow和Ticker示例:
此示例使用视频混合渲染器混合视频和文本。它使用IVMRMixerBitmap9接口将文本混合到视频窗口的底部。
DirectShow用于构建用于播放音频或视频流的过滤器图形,为不同的效果和操作视频和音频样本添加不同的过滤器。
答案 1 :(得分:1)
您也可以使用ISampleGrabber界面,而不是使用DirectShow的视频混合渲染器。优点是,它是一个可以与其他渲染器一起使用的过滤器,例如,当不在屏幕上显示视频但通过网络流式传输或将其转储到文件时。