您的位置:首页 > 编程语言 > C#

C#图片半透明效果

2013-10-02 19:09 302 查看
目前有个任务,需要实现图片颜色半透明,效果如下图:



测试了一下,使用方法为在上面自定义一个控件,在控件上用指定颜色绘制一个矩形,并指定其为半透明(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: