C#图片半透明效果

这篇博客介绍了如何在C#中实现图片颜色半透明的效果。通过自定义控件,绘制带有特定透明度的矩形来达到半透明遮罩的目的。文章提供了构建函数和典型代码示例,并强调在更新透明度和颜色参数后需要刷新控件以显示效果。参考了《C#实现Winform自定义半透明遮罩层介绍》一文,并提供了源码下载链接。

目前有个任务,需要实现图片颜色半透明,效果如下图:


测试了一下,使用方法为在上面自定义一个控件,在控件上用指定颜色绘制一个矩形,并指定其为半透明(alpha方式)。

定义控件

定义控件如下内容:

public MyOpaqueLayer()//构建函数  含有参数的初始化,主要是alpha值、遮罩颜色等。

典型的构建函数为:

 	 public MyOpaqueLayer(int Alpha, bool IsShowLoadingImage)
        {
            SetStyle(System.Windows.Forms.ControlStyles.Opaque, true);
            base.CreateControl();
            this._alpha = Alpha;
            _new_brush_color = new Color();
            _new_brush_color = Color.Transparent;
        } 	

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)       /// 自定义绘制窗体  绘制矩形并叠加
典型的绘制函数为

   /// <summary>
        /// 自定义绘制窗体
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {

            float vlblControlWidth;
            float vlblControlHeight;

            Pen labelBorderPen;
            SolidBrush labelBackColorBrush;
            
            //透明处理笔刷
            Color drawColor = Color.FromArgb(this._alpha, _new_brush_color);
            labelBorderPen = new Pen(drawColor, 0);
            labelBackColorBrush = new SolidBrush(drawColor);

       
            base.OnPaint(e);
            vlblControlWidth = this.Size.Width;
            vlblControlHeight = this.Size.Height;
            e.Graphics.DrawRectangle(labelBorderPen, 0, 0, vlblControlWidth, vlblControlHeight);
            e.Graphics.FillRectangle(labelBackColorBrush, 0, 0, vlblControlWidth, vlblControlHeight);
        }
  protected override CreateParams CreateParams    //在msdn中注明重定义的内容,主要是设定控件风格,使其 支持透明

典型代码为:

        protected override CreateParams CreateParams//v1.10 
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020; //0x20;  // 开启 WS_EX_TRANSPARENT,使控件支持透明
                return cp;
            }
        }
两个设置项目:

   private int _alpha = 125;//设置透明度  
        public Color _new_brush_color;
        [Category("MyOpaqueLayer"), Description("设置透明度")]
        public int Alpha
        {
            get
            {
                return _alpha;
            }
            set
            {
                _alpha = value;
                this.Invalidate();
            }
        }
        [Category("MyOpaqueLayer"), Description("设置蒙层颜色")]
        public Color new_brush_color
        {
            get
            {
                return _new_brush_color;
            }
            set
            {
                _new_brush_color = value;
                this.Invalidate();
            }
        }


使用

使用在需要蒙色的地方加上这几句(其中_alpha请替换成你需要的透明度,colorDialog1.Color请替换成你希望的颜色)

   	this.m_OpaqueLayer = new MyOpaqueLayer.MyOpaqueLayer(_alpha, false);
  	 m_OpaqueLayer.Alpha = _alpha;
  	 m_OpaqueLayer.new_brush_color = colorDialog1.Color;
   	pictureBox1.Controls.Add(this.m_OpaqueLayer);
   	this.m_OpaqueLayer.Dock = DockStyle.Fill;

注意如下事项:

  • 开启 WS_EX_TRANSPARENT,使控件支持透明
  • 在更新参数(包含遮罩颜色和alpha透明度)之后要刷新控件,刷新时注意,你的自定义控件添加到谁那里就刷新谁。如果你做的半透明是一个picture而刷新form,结果就是没反应,需要把窗口切到后台再切回来才回变化。

本功能做法参考文章《C#实现Winform自定义半透明遮罩层介绍》

源码示例请参考这个:http://download.csdn.net/detail/sanredfish/6349195


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值