我正在开发一个应用程序,我有一个问题,我似乎找不到解决方案。该应用程序是用vc++编写的。我需要做的是显示一个YUV视频馈送与文本在它的顶部。
现在,通过使用GDI在OnPaint方法中绘制文本,并在DirectDraw覆盖图上绘制视频,它可以正常工作。我需要去掉覆盖,因为它会导致很多问题。它不能工作在一些显卡,vista,7,等等。
我想不出一种更兼容的方式来完成同样的事情。我可以使用带有后台缓冲区的DirectDraw绘制视频,并将其复制到主缓冲区。这里的问题是,在GDI中绘制的文本会因为视频刷新的次数而闪烁。我真的很想保持代码,以绘制文本,如果可能的话,因为它工作得很好。
有没有一种方法可以直接将文本绘制到DirectDraw缓冲区或内存缓冲区或其他地方,然后将其blt到后台缓冲区?我应该一起看另一种方法吗?两个重要的操作系统是XP和7。如果有人有任何想法,请让我知道,我会测试他们。谢谢。
发布于 2010-02-16 13:37:47
尝试在microsoft.com上查看DirectShow和Ticker示例:
此示例使用视频混合渲染器混合视频和文本。它使用IVMRMixerBitmap9界面将文本混合到视频窗口的底部。
DirectShow用于构建用于播放音频或视频流的过滤器图,并为视频和音频样本的不同效果和操作添加不同的过滤器。
发布于 2010-02-16 14:26:01
也可以使用ISampleGrabber界面,而不是使用DirectShow的视频混合渲染器。优点是,它是一个过滤器,也可以与其他渲染器一起使用,例如,当不在屏幕上显示视频,而是通过网络流式传输视频或将其转储到文件时。
https://stackoverflow.com/questions/2270809
复制相似问题