在叠加视频上绘制透明控件(文本)(VLC Winform)

时间:2016-11-20 14:03:30

标签: c# .net winforms transparency vlc

这类问题多次asked次 但由于某种原因,它没有按预期工作! 我在Panel(Control)中使用vlc,然后在vlc控件的顶部放置一个标签。 我希望标签的背景透明。我使用下面的代码

  label1.Parent = vlcControl1;
  label1.backColor = Color.Transparent;

这里的问题是标签显示,直到vlc没有播放任何媒体 一旦我播放媒体文件,标签就会被隐藏。
我也尝试了

  label1.bringToFront();
  label1.Visible=true;

如果我停止vlc播放视频文件,vlcControl1.Stop();标签将会显示。

3 个答案:

答案 0 :(得分:3)

Windows Forms版本存在空域问题,我不知道解决它的可用解决方法。

对于WPF版本,这是VlcDotNet最后一个版本的已知问题:Wpf VlcControl seems to ignore ZIndexVlcControl is always on the top of my window它发生,因为WPF VLC控件是显示Windows窗体控件的HwndHost。

已知的替代方案应该是,使用WPF和:

  1. 使用旧版本的VlcDotNet(版本1.2.0.0没有 空域问题)
  2. 使用纯WPF的替代控件 实施,例如Meta.Vlc
  3. 实施解决方法 空域问题,例如AirspacePopup

答案 1 :(得分:1)

这是2019年的最新状态:

从Vlc.DotNet 3.0开始,WPF控件没有空域问题。但是,渲染是在CPU上完成的,这会导致性能下降(也就是您不应该使用它)(https://github.com/ZeBobo5/Vlc.DotNet/issues/296

使用LibVLCSharp,采取了另一种方法来实施空域黑客攻击。

可悲的是,这是所有的权衡...

答案 2 :(得分:1)

我在手动设置字幕时遇到了这个问题,并且我更改了策略以不使用我自己的标签或任何其他标签。实际上,Libvlc C#(libvlcSharp)可以使用Marquee进行此操作。这是我的代码:

_mediaPlayer.SetMarqueeInt(VideoMarqueeOption.Enable, 1); //enable marquee option
_mediaPlayer.SetMarqueeInt(VideoMarqueeOption.Size, 32); //set the font size 
_mediaPlayer.SetMarqueeInt(VideoMarqueeOption.Position, 8); //set the position of text
_mediaPlayer.SetMarqueeString(VideoMarqueeOption.Text, "my text"); //to set subtitle or any other text

position具有选项like this,您还可以通过_mp.SetMarqueeInt(VideoMarqueeOption.X, 50);_mp.SetMarqueeString(VideoMarqueeOption.Y, 50);

设置位置