文档章节

绘图板【或画板】

杨润康Bla
 杨润康Bla
发布于 2016/05/18 18:04
字数 1047
阅读 7
收藏 0
点赞 2
评论 0
<img src="http://img.blog.csdn.net/20150419002147281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWWFuZ1J1bmthbmdCbGE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace Draw
{
    public partial class PrintForm : Form
    {
        public PrintForm()
        {
            InitializeComponent();
        }  
        #region   成员变量
        Graphics g = null;//画布,在窗体加载事件中生成
        Pen p = null;//笔,在窗体加载的时间中生成
      //  Brush b = new ;//填充
        Brush b = null;
        Color color = Color.Black;//画笔的颜色,默认为黑色
        string shape = "";//绘什么图形
        float width = 1;//笔的粗细,默认为1
        Point beginPoint = new Point();//开始的点坐标,在鼠标按下事,进行获取
        Point endPoint = new Point();//结束的点坐标,在鼠标释放时,进行获取

        #endregion

        #region 加载事件只负责初始化  设置笔的粗细  颜色的选择
        /// <summary>
        /// 颜色的选择
        /// </summary>
        private void 选择颜色ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //接受用户选择的按钮,这个按钮为颜色控件上的按钮
            DialogResult result= this.colorDialog1.ShowDialog();
            if (result == DialogResult.OK)//如果用户选择了Ok按钮
            {
                color = this.colorDialog1.Color;//获取用户选择的颜色
                
            }
        }

        private void PrintForm_Load(object sender, EventArgs e)
        {
            //在窗体的加载事件中创建Panel控件的Graphics
            g = this.panelDraw.CreateGraphics();
            p = new Pen(color, width);//设置笔的颜色和粗细
         
       
        }

        //设置笔的粗细
        private void toolStripTextBox2_TextChanged(object sender, EventArgs e)
        {
            try
            {
                width = Convert.ToInt32(this.toolStripTextBox2.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("请输入有效的内容");
            }
        }

        #endregion

        #region  逻辑的处理
        bool isMouseUp = false;//鼠标是否释放
        bool isMouseDown = false;//鼠标是否按下
     //   bool roundPaint = false;//控制圆只画一次
        #endregion

        //在panel控件上,按下鼠标
        private void panelDraw_MouseDown(object sender, MouseEventArgs e)
        {
            if (!isMouseUp)//在释放鼠标之前,进if
            {
                beginPoint.X = e.X;
                beginPoint.Y = e.Y;
                isMouseUp = true;//记录下来之后,就把鼠标的状态isMouseUp设为true,给下面的鼠标移动使用
                
            }
           
        }

        //在panel控件上,处理鼠标的移动
        private void panelDraw_MouseMove(object sender, MouseEventArgs e)
        {
            if (shape == "")
            {
                convenientlyPaint(sender, e);
                return;
            }
            if (shape == "橡皮擦")
            {
                xiangpicao(sender, e);
                return;
            }

            

            if (shape == "空心圆" && isMouseUp)//光是一个条件,圆会一直重复花,而且会重叠,所以得在来一个条件,就是鼠标释放时,画一次,画最后的一次
            {
                BlankRound(sender,e);
                return;
            }

            
           
           
        }

        #region 随手绘
        /// <summary>
        /// 随手绘制图形
        /// </summary>
        /// <param name="sender"></param>//巧妙的地方 传参
        /// <param name="e"></param>
        public void convenientlyPaint(object sender, MouseEventArgs e)
        {
            if (isMouseUp)//在移动过程中,如果释放
            {
                endPoint.X = e.X;
                endPoint.Y = e.Y;
                g.DrawLine(p, beginPoint, endPoint);
            }
            //重写设置起点---->轨迹
            beginPoint.X = e.X;
            beginPoint.Y = e.Y;
            //如果不设置,是使用默认的,设置了,是使用设置后的
            p.Color = color;
            p.Width = width;
        }


        public void xiangpicao(object sender, MouseEventArgs e)
        {
            if (isMouseUp)//在移动过程中,如果释放
            {
                endPoint.X = e.X;
                endPoint.Y = e.Y;
                g.DrawLine(p, beginPoint, endPoint);
            }
            //重写设置起点---->轨迹
            beginPoint.X = e.X;
            beginPoint.Y = e.Y;
            //如果不设置,是使用默认的,设置了,是使用设置后的
            p.Color = Color.White;
            p.Width = 5;
        }
        

        #endregion

        /// <summary>
        /// 绘制空心圆
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void BlankRound(object sender, MouseEventArgs e)
        {
           
            if (isMouseUp)//在移动过程中,如果释放
            {
                endPoint.X = e.X;
                endPoint.Y = e.Y;
           }
        }
        
        //当我鼠标释放时,停止绘图--->说白了,一切恢复到初始化之前
        private void panelDraw_MouseUp(object sender, MouseEventArgs e)
        {
            isMouseUp = false;//鼠标是否释放
           
            isMouseDown = false;//鼠标是否按下
            //beginPoint = new Point();//起点坐标初始化,下次点击就有了---------------被这行代码坑死了
            endPoint.X = e.X;
            endPoint.Y = e.Y;

            if (shape == "空心圆")//是可以的
            {
                 p.Color = color;
                p.Width = width;
                g.DrawEllipse(p, beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
            }

            if (shape == "实心圆")//是可以的
            {
                 p.Color = color;
                 p.Width = width;
                 SolidBrush solidBrush = new SolidBrush(color);
                Rectangle rec=new Rectangle(beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
                g.FillEllipse(solidBrush,rec);
                g.DrawEllipse(p, beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
            }

            if( shape == "直线")
            {
                 p.Color = color;
                 p.Width = width;
                g.DrawLine(p, beginPoint, endPoint);
            }
            if (shape == "空心正方形")
            {
                p.Color = color;
                p.Width = width;
                Rectangle rec = new Rectangle(beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
                g.DrawRectangle(p,rec);
            }

            if (shape == "实心正方形")
            {
                p.Color = color;
                p.Width = width;

                SolidBrush solidBrush = new SolidBrush(color);
                Rectangle rec = new Rectangle(beginPoint.X, beginPoint.Y, Math.Abs(beginPoint.X - endPoint.X), Math.Abs(beginPoint.Y - endPoint.Y));
                g.FillRectangle(solidBrush, rec);
              
                g.DrawRectangle(p, rec);
            }
        }

        #region  用户选择绘制的具体图形

        private void 绘图ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            shape = "空心圆";
        }

        private void toolStripMenuItem1_Click_1(object sender, EventArgs e)
        {
            shape = "实心圆";
           
        }

        private void 直线ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            shape = "直线";
        }

        private void 正方形ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            shape = "空心正方形";
        }

        private void 实心正方形ToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            shape = "实心正方形";
        }
        

        private void 笔的粗细ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            shape = "";
        }
        #endregion

        private void 橡皮擦ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            shape = "橡皮擦";
        }

        private void 清空画板ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.panelDraw.Invalidate();
           
            
        }
    }
}

本文转载自:http://blog.csdn.net/yangrunkangbla/article/details/45120163

共有 人打赏支持
杨润康Bla
粉丝 14
博文 76
码字总数 0
作品 0
合肥
后端工程师
MyPaint 0.9.1 发布,绘图小程序

该版本是个bug修复版,没有任何新功能。 MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动力...

红薯 ⋅ 2011/03/05 ⋅ 0

绘图软件--MyPaint

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动力学(变化的速度,压力,或随机) 。画布的...

匿名 ⋅ 2009/06/07 ⋅ 0

MyPaint 0.8.2 发布

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动 力学(变化的速度,压力,或随机) 。画布...

红薯 ⋅ 2010/02/28 ⋅ 0

MyPaint 1.1.0 发布,Linux 绘图软件

MyPaint 1.1.0 增加了新的支持域约束的颜色对话框;工具栏增加新的几何工具(直线、曲线和圆圈);新的混合模型;改进文档框架;支持对称绘制等等,同时还有 bug 修复和优化。 MyPaint是一个...

oschina ⋅ 2013/01/03 ⋅ 0

MyPaint 0.8.1 发布,绘图软件

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了 一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动力学(变化的速度,压力,或随机) 。画布...

红薯 ⋅ 2010/02/22 ⋅ 0

MyPaint 0.9.0 发布,绘图小程序

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动力学(变化的速度,压力,或随机) 。画布的...

红薯 ⋅ 2010/11/03 ⋅ 2

MyPaint 0.8.0 发布

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动 力学(变化的速度,压力,或随机) 。画布...

小编辑 ⋅ 2010/01/30 ⋅ 0

MyPaint 1.0 发布,开源绘图工具

MyPaint是一个图像绘画程序。它支持的压力敏感的绘图板,并配备了一个易于使用的刷子收集。有一个复杂的接口,用于创建自己的画笔,把重点放在刷动力学(变化的速度,压力,或随机) 。画布的...

红薯 ⋅ 2011/11/23 ⋅ 3

MyPaint 1.2.0 发布,开源绘图程序

MyPaint 1.2.0 发布,此版本主要改进: 新增直观的 Inking 工具 新增 Flood Fill 工具 自动备份你正在工作的文档,启动的时候恢复 改进 symmetry-setting 和 frame-setting 模式 新工作空间 ...

oschina ⋅ 2016/01/16 ⋅ 3

GIMP 2.8 及后续开发计划

著名开源图像编辑器GIMP最近颇受人关注,在开发上它正面临困境,人手严重不足。根据Ohloh的统计,GIMP的活跃开发者为四人,而其中一人过去一年鲜有贡献;新一代非破坏性图像处理核心GEGL项目...

红薯 ⋅ 2011/01/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 14分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 18分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 20分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 39分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 45分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 46分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 50分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 50分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 56分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 59分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部