实现步骤
1.首先设置窗体背景为一美女图片
2.创建一个遮盖层 coverImg,用灰色背景填充
coverImg = new Bitmap(Width, Height); Graphics g = Graphics.FromImage(coverImg); g.Clear(Color.Gray); g.Dispose(); g = null;
3.在窗体的painting事件中,绘制遮盖层
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.DrawImage(coverImg, new Point(0, 0)); }
4.在窗体的mousemove事件用透明色画笔进行绘图,重点来了,要设置画布的CompositingMode为SourceCopy,
我们来看下CompositingMode的两种模式
SourceOver,也就是源色与背景色混合,SourceCopy相当于用源色替换背景色
CompositingMode 默认值为SourceOver,这就是我们应用透明画笔没效果的原因
绘制代码如下
private void Form1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { isMouseDown = true; ptStart = e.Location; } } Pen pen = new Pen(Color.FromArgb(0) , 30); private void Form1_MouseMove(object sender, MouseEventArgs e) { if(isMouseDown) { Graphics g = Graphics.FromImage(coverImg); g.CompositingMode = CompositingMode.SourceCopy; g.DrawLine(pen, ptStart, e.Location); g.Dispose(); g = null; ptStart = e.Location; this.Invalidate(); } } private void Form1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { isMouseDown = false; } }
5.绘制完遮盖层,调用Invalidate方法,让窗体重绘,这样一个简单的橡皮擦就完成了。