Я разрабатываю проект, который должен выглядеть как прикрепленный скриншот.Элементы управления с прозрачным фоном поверх видео
У меня есть WinForm с панелью VideoPanelCtl поверх нее. Рукоятка панели передается в компонент VLC, созданный на основе VLC, который приводит к отображению видео на этой панели.
Я также попытался поставить еще одну панель поверх VideoPanelCtl в верхнем конце панели видео и сделать ее прозрачной, а элементы управления, которые сидят поверх этой верхней панели, также должны иметь прозрачный фон, как показано на прилагаемом скриншоте , Тем не менее, мой подход не работал, несмотря на то, что я использовал настраиваемую панель из панели управления с перерисованием bkg (см. Код ниже). Панель, которую я создавала в коде вроде этого, просто была закрыта видео ... и если бы я поставил управления на нем (кнопки и надписи), они, вероятно, будут тусклыми, тоже ...
я называю это из обработчика нагрузки формы в части WinForm:
private void InitTopPanel()
{
mExtendedPanelTop = new ExtendedPanel();
mExtendedPanelTop.Opacity = 50; // totally transparent
videoPanelCtl.Controls.Add(mExtendedPanelTop);
mExtendedPanelTop.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
mExtendedPanelTop.Dock = System.Windows.Forms.DockStyle.Top;
mExtendedPanelTop.Location = new System.Drawing.Point(0, 0);
mExtendedPanelTop.Name = "ExtendedPanelTop";
mExtendedPanelTop.Size = new System.Drawing.Size(1090, 48);
mExtendedPanelTop.TabIndex = 0;
//mExtendedPanelTop.Paint += mExtendedPanelTop_Paint;
}
public class ExtendedPanel : Panel
{
private const int WS_EX_TRANSPARENT = 0x20;
public ExtendedPanel()
{
SetStyle(ControlStyles.Opaque, true);
}
private int opacity = 50;
//[DefaultValue(50)]
public int Opacity
{
get
{
return this.opacity;
}
set
{
if (value < 0 || value > 100)
throw new ArgumentException("value must be between 0 and 100");
this.opacity = value;
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
return cp;
}
}
protected override void OnPaint(PaintEventArgs e)
{
using (var brush = new SolidBrush(Color.FromArgb(this.opacity * 255/100, this.BackColor)))
{
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}
base.OnPaint(e);
}
}
- Как достичь контроля над верхней видео, которые сидят на прозрачной панели, а также имеют прозрачный фон?
- Как достичь полупрозрачной этикетки поверх видео с текстом (красный логотип на этикетке), который гласит: «Видеосвязь Lost»? (см. прилагаемый)
Видео ovelay сильно зависит от части управления видео. Остальное лучше всего сделать, нарисовав на элементе управления, но если это будет работать, это зависит от части видео. Когда-то видео на самом деле __вершило __ все, и вы просто не можете использовать регулярные элементы управления или чертеж GDI, чтобы нарисовать его. – TaW