C#中picturebox控件怎样在播放视频的同时在上面画图啊,播放视频的时候总是会挡住在picturebox上画的线,但是我又需要在播放视频的同时画线,而且不要被视频挡住,就像是画图是在视频上画的

解决方案 »

  1.   

    picturebox播放视频?播放过程中画线?
    可以考虑在一个picturebox上覆盖一个透明容器,在透明容器上画线,下面的picturebox播放视频,这样就互不影响了给你一个透明容器的代码,你参考修改一下
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;namespace COMMON
    {
        public partial class TransparentInfo : System.Windows.Forms.UserControl
        {
            private string m_strInfo;
            public void ShowInfo(string strInfo) //透明容器上显示文字
            {
                m_strInfo = strInfo;
                this.Invalidate();
            }        private void TransparentInfo_MouseEnter(object sender, EventArgs e)
            {
                this.Visible = true;
            }        public bool drag = false;
            public bool enab = false;
            private Color fillColor = Color.White;
            private int opacity = 75; //默认透明度
            private int alpha;        public TransparentInfo()
            {
                SetStyle(ControlStyles.SupportsTransparentBackColor, true);
                SetStyle(ControlStyles.Opaque, true);
                this.BackColor = Color.Transparent;
            }        public Color FillColor
            {
                get
                {
                    return this.fillColor;
                }
                set
                {
                    this.fillColor = value;
                    if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
                }
            }        public int Opacity
            {
                get
                {
                    if (opacity > 100) { opacity = 100; }
                    else if (opacity < 1) { opacity = 1; }
                    return this.opacity;
                }
                set
                {
                    this.opacity = value;
                    if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
                }
            }        //protected override CreateParams CreateParams
            //{
            //    get
            //    {
            //        CreateParams cp = base.CreateParams;
            //        cp.ExStyle |= 0x20;
            //        return cp;
            //    }
            //}        protected override void OnPaint(PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                Rectangle bounds = new Rectangle(0, 0, this.Width - 1, this.Height - 1);            Color frmColor = this.Parent.BackColor;
                Brush brushColor;
                Brush bckColor;            alpha = (opacity * 255) / 100;            if (drag)
                {
                    Color dragFillColor;
                    Color dragBckColor;                if (BackColor != Color.Transparent)
                    {
                        int Rb = BackColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
                        int Gb = BackColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
                        int Bb = BackColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
                        dragBckColor = Color.FromArgb(Rb, Gb, Bb);
                    }
                    else dragBckColor = frmColor;                if (fillColor != Color.Transparent)
                    {
                        int Rf = fillColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
                        int Gf = fillColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
                        int Bf = fillColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
                        dragFillColor = Color.FromArgb(Rf, Gf, Bf);
                    }
                    else dragFillColor = dragBckColor;                alpha = 255;
                    brushColor = new SolidBrush(Color.FromArgb(alpha, dragFillColor));
                    bckColor = new SolidBrush(Color.FromArgb(alpha, dragBckColor));
                }
                else
                {
                    Color color = fillColor;
                    brushColor = new SolidBrush(Color.FromArgb(alpha, color));
                    bckColor = new SolidBrush(Color.FromArgb(alpha, this.BackColor));
                }            if (this.BackColor != Color.Transparent | drag)
                {
                    g.FillRectangle(bckColor, bounds);
                }            if(m_strInfo!=null && m_strInfo.Length>0)
                {
                    g.DrawString(m_strInfo, this.Font, new SolidBrush(this.ForeColor), 10, 10);
                }            brushColor.Dispose();
                bckColor.Dispose();
                g.Dispose();            base.OnPaint(e);
            }        protected override void OnBackColorChanged(EventArgs e)
            {
                if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
                base.OnBackColorChanged(e);
            }        protected override void OnParentBackColorChanged(EventArgs e)
            {
                this.Invalidate();
                base.OnParentBackColorChanged(e);
            }
        }
    }
      

  2.   

    这个或许能帮到你!
    文章:《DotNet实现PictureBox重叠透明效果》
    URL: http://www.cnblogs.com/hanyonglu/archive/2012/04/04/2431625.html