目前有个任务,需要实现图片颜色半透明,效果如下图:
测试了一下,使用方法为在上面自定义一个控件,在控件上用指定颜色绘制一个矩形,并指定其为半透明(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
这篇博客介绍了如何在C#中实现图片颜色半透明的效果。通过自定义控件,绘制带有特定透明度的矩形来达到半透明遮罩的目的。文章提供了构建函数和典型代码示例,并强调在更新透明度和颜色参数后需要刷新控件以显示效果。参考了《C#实现Winform自定义半透明遮罩层介绍》一文,并提供了源码下载链接。

5688

被折叠的 条评论
为什么被折叠?



