如何在C#中的视频图片框上绘制叠加?

时间:2013-12-02 10:50:36

标签: c# video-streaming overlay picturebox

我有一个从DirectShow播放视频的图片框。我想在图片框上绘制一个矩形覆盖图,仅在该矩形中抓取图像。我找到了一些在图片框上绘制矩形的样本,但不是用于播放视频的图片框。如果有人有这方面的经验,请告诉我该怎么做。我很感激。非常感谢你。

************更新*****

正如您可以看到下面的图片,我创建了一个用户控件并将其添加到窗体控件中,我将此用户控件放在图片框(正在播放视频)上

mOverlay = new MyUserControl();
mOverlay.Location = new Point(50,50);
Form1.Controls.Add(mOverlay);           
mOverlay.BringToFront();

我在这个用户控件上绘制了一个红色矩形,虽然我像这样设置了这个用户控件的透明,但它不起作用:

SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent; //this here is MyUsercontrol

enter image description here

如何让这个usercontrol是透明的背景,以便我可以看到下面的视频?非常感谢。

2 个答案:

答案 0 :(得分:1)

我的意思是这样的:

See Through Rectangle via GraphicsPath and Region

public partial class MyUserControl : UserControl
{
    public MyUserControl()
    {
        InitializeComponent();
        this.BackColor = Color.Red;
        this.SizeChanged += MyUserControl_SizeChanged;
    }

    void MyUserControl_SizeChanged(object sender, EventArgs e)
    {
        System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
        Rectangle rc = this.ClientRectangle;
        gp.AddRectangle(rc);
        rc.Inflate(-4, -4);
        gp.AddRectangle(rc);
        this.Region = new Region(gp);
    }
}

答案 1 :(得分:1)

我几周前用其他相机完成了这项工作,如果你想在Picture框上绘制矩形,只需处理你的图片框的绘画事件并画出你的矩形;

    private void pictuerBox_Paint(object sender, PaintEventArgs e)
    {
         if(IsDrawRect) // Flag Variable to check if need to draw rect
              {

                Rectangle RectMark = new Rectangle(startX,StartY,Hieght,Widht); // your location to draw
                e.Graphics.DrawRectangle(new Pen(Color.Red, 1), RectMark);
               }
    }

然后你必须从picturebox剪辑图像;

      //  Create Temp Bitmap Image 
       Bitmap    bmpImgDisp =
                new Bitmap(250, 250);  // your size of rect.
      using (Graphics g = Graphics.FromImage(bmpImgDisp))
            {
                   g.DrawImage(YourMainpictuerBox.Image, new RectangleF(0, 0, 250, 250), rect size you want to clip {x,y,height,widht}, GraphicsUnit.Pixel);
            }