为什么要使用DirectShow(.NET)重新绘制无窗口控件?

时间:2013-04-14 22:24:59

标签: c# winapi video directshow directshow.net

我正在使用IVMRWindowlessControl9播放视频,即WindowlessControl w / VMR-9。当我最初设置视频时遇到困难时,我注意到在网上找到了很多这样的代码在Window的Paint处理程序中有这段代码:

IntPtr hdc = e.Graphics.GetHdc();
int hr = 0;
hr = windowlessCtrl.RepaintVideo(this.Handle, hdc);
e.Graphics.ReleaseHdc(hdc);

我的视频正常播放但我没有上述代码。上面的代码做了什么,有没有使用它?

2 个答案:

答案 0 :(得分:1)

在大多数情况下,您无需显式重新绘制视频,因为视频渲染器会自动执行此操作。是的,如果托管窗口需要 - 出于任何原因 - 请求强制重放,例如WM_PAINT窗口消息处理程序的一部分,那么RepaintVideo方法就在您的服务中。

在MSDN上查看更多信息,VMR Windowless Mode

  

在播放过程中,应用程序应通知VMR   以下Windows消息:

     

WM_PAINT:调用IVMRWindowlessControl :: RepaintVideo来重绘   图像。

答案 1 :(得分:1)

至于它的作用:

  • 如果使用目标颜色键绘制视频,则会将键颜色绘制到目标窗口中。

  • 如果图像是letterboxed,或者部分图像落在另一台显示器上,它将绘制图像未覆盖的部分。

因此,如果根本没有完成,你可能不会看到任何差异,如果这些都不适用的话。