WinForm橡皮擦

实现步骤
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方法,让窗体重绘,这样一个简单的橡皮擦就完成了。

源码

猜你喜欢

转载自www.cnblogs.com/tianyi666/p/8985536.html