Search code examples
c#winformstransparencywebcam

c# Add transparent label on web eye web cam control


I have been working on an Iron Man hud. I am using WebEye to access the web cam... now i have to add label over the web cam control but the label is not transparent I have tried every control but cant use the transparency function..

Here's my code

 foreach (WebCameraId camera in webCameraControl1.GetVideoCaptureDevices())
        {
            comboBox1.Items.Add(new ComboBoxItem(camera));
        }

        if (comboBox1.Items.Count > 0)
        {
            comboBox1.SelectedItem = comboBox1.Items[0];
        }

        ComboBoxItem i = (ComboBoxItem)comboBox1.SelectedItem;

        try
        {
            webCameraControl1.StartCapture(i.Id);
        }
        finally
        {
            //Do something if u want to
        }

please help!!


Solution

  • Actually, creating a transparent label will not help over video. If your webCameraControl is not a sealed class, you can inherit it to add the text directly on it's surface, like I did with this picture box:

    public partial class LabledPictureBox : PictureBox
    {
        public LabledPictureBox()
        {
            InitializeComponent();
        }
    
        #region properties
    
        // I needed to override these properties to make them Browsable....
    
        [Browsable(true)]
        public override string Text
        {
            get
            {
                return base.Text;
            }
    
            set
            {
                base.Text = value;
            }
        }
    
        [Browsable(true)]
        public override Font Font
        {
            get
            {
                return base.Font;
            }
    
            set
            {
                base.Font = value;
            }
        }
    
        [Browsable(true)]
        public override Color ForeColor
        {
            get
            {
                return base.ForeColor;
            }
    
            set
            {
                base.ForeColor = value;
            }
        }
    
        #endregion properties
    
        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
    
            // This is actually the only code line that's needed to add the text to the picture box
            TextRenderer.DrawText(pe.Graphics, this.Text, this.Font, pe.ClipRectangle, this.ForeColor);
        }
    }
    

    The most important thing here is the line right after base.OnPaint - That line actually paints the text directly over the surface of the already painted control.