• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

tianyi666

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

源码

 

posted on 2018-05-03 16:20  tianyi666  阅读(395)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3