2016-07-22 5 views
2

私は添付のスクリーンショットのように見える必要があるプロジェクトを開発しています。ビデオの上に透明な背景を持つコントロール

私はそれの上にVideoPanelCtlパネルを持つWinFormを持っています。パネルのハンドルは、インスタンス化されたVLCコンポーネント/コントロールに渡され、そのパネルにビデオが表示されます。

また、ビデオパネルの上端にあるVideoPanelCtlの上に別のパネルを置き、透明にして、この上部パネルの上に座っているコントロールも、添付のスクリーンショットに示すように透明な背景を持つようにしてください。しかし、私のアプローチは、bkgの塗り替えでパネルコントロールから派生したカスタムパネルを使用したにもかかわらず、うまくいかなかった(下記のコードを参照)。このようなコードで作成していたパネルは、単にビデオによって隠されていた。その上にコントロール(ボタンやラベル)彼らはおそらくあまりにも不明瞭にされるだろう...

私はWinフォームのフォームのLoadハンドラからこれを呼び出す:

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); 
    } 
} 
  1. どのように私はの上のコントロールを実現します透明なパネルに座って透明な背景を持つビデオ?
  2. "Video Connection enter image description here Lost"というテキスト(赤いラベルの背景)を使用して、ビデオの上に半透明のラベルを付けるにはどうすればよいですか?
+0

ビデオovelayは、ビデオコントロール部に大きく依存しています。残りの部分は、コントロールにペイントするのが最も効果的ですが、それがビデオ部分に依存しているかどうかによって決まります。いつの間にかビデオは本当に__overlaying__すべてで、あなたはそれをペイントするために通常のコントロールやGDIの描画を使うことはできません。 – TaW

答えて

0

キャンバスとMediaElementとLabel(または他のコントロール)を含むキャンバスを含むWPFコントロールを使用して解決しました。その後、ラベルのZIndexを高く設定すると可視性が失われます。したがって、透明な背景を持つLabelを使用して、実行中のビデオ(MediaElement内)に可視のラベルが表示されます。

関連する問題