【问题标题】:How can I make a control transparently overlay a DirectShow video?如何使控件透明地覆盖 DirectShow 视频?
【发布时间】:2008-11-20 16:31:27
【问题描述】:

我有一个控件 VideoControl,它使用 DirectShow 显示视频 - 它被设置为 IVideoWindow 的所有者。我有另一个控件,AreaControl,它应该在视频控件上显示一个虚线矩形。使用 SetStyle(ControlStyles.SupportsTransparentBackColor, true) 将 AreaControl 设置为透明。如果我将 AreaControl 放在任何其他控件上,它会按预期工作,在其后面的控件上显示一个虚线矩形。但是当我将虚线矩形控件放在视频控件上时,AreaControl 会被 VideoControl 的 BackColor 填充。

我需要做什么才能通过 AreaControl 显示视频,并在其上覆盖虚线矩形?有没有办法让 VideoControl 用视频绘制自己,而不仅仅是绘制它的 BackColor?

【问题讨论】:

    标签: c# .net directshow


    【解决方案1】:

    据我所知,没有办法做,你想直接做什么。问题是,一个控件的透明样式的实现。具有此样式属性的控件基本上只是绘制,它背后的东西使它看起来透明。 (实际上它根本不是真正透明的)。

    我想到的唯一解决方案是使用窗口(窗体)并将控件放入其中。可以通过将其 Opacity 属性设置为小于 1.0 的值来使窗体透明。值 0.0 将完全透明(阅读:不可见)。虚线边框应该是全黑的。不透明度为 f.e. 0.4 它将显示为灰色。

    或者,您可能对表单的 TransparencyKey 属性有一些运气。将此设置为白色可能会产生预期的效果,但我还没有测试过这个。

    在任何一种情况下,表单都应该是完全无边界的。当视频表单移动时,您可能需要添加一些代码来重新定位表单。

    【讨论】:

      【解决方案2】:

      最终的答案是使用 AreaControl 的 Region 属性,因为我们不需要部分透明。

      【讨论】:

        猜你喜欢
        • 2016-01-21
        • 1970-01-01
        • 2016-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-18
        • 1970-01-01
        相关资源
        最近更新 更多