【自用存档】c# winform 简易画图软件开发v0.1代码【绘画】

【自用存档】c# winform 简易画图软件开发v0.1代码【绘画】

1.创建项目

在这里插入图片描述

2.组件选择

Button:实现一个清理屏幕按钮,一个保存文件按钮
(注:保存文件后面可以用SaveFileDialog,本次先介绍简单的组件功能)
TextBox:文本输入框,用于输入保存路径
PictureBox:用于显示图像

摆好组件:
在这里插入图片描述

3.代码部分

3.1画图功能

实现画图功能需要用到GDI+绘图功能

需要设置的变量有:

        bool is_pen_down = false;   //判断画笔是否落下
        bool is_first_point = true; //记录第一个点 即落笔位置
        Graphics g;     //绘图类的对象
        Point p1, p2;   //线段的两个点
        Pen pen1 = new Pen(Color.Red, 1);   //画笔,构造函数为Pen(颜色, 粗细)
        Bitmap bitmap;  //位图,用于直接绘图

需要在PictureBox设置的事件有:

private void PictureBox1_Resize(object sender, EventArgs e) //自定义 初始化事件
        {
            bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            g = Graphics.FromImage(bitmap);
        }

private void pictureBox1_MouseDown(object sender, MouseEventArgs e) //鼠标按下
        {
            is_pen_down = true;
            is_first_point = true;
        }

private void pictureBox1_MouseUp(object sender, MouseEventArgs e) //鼠标松开
        {
            is_pen_down = false;
        }

PictureBox画图功能具体实现:

private void pictureBox1_MouseMove(object sender, MouseEventArgs e) //鼠标移动
        {
            if(is_first_point)  //确定落笔时第一点位置
            {
                p1 = new Point(e.X, e.Y);
                is_first_point = false;
            }

            if(is_pen_down)
            {
                p2 = new Point(e.X, e.Y);
                g.DrawLine(pen1, p1, p2);   //画线,两点确定一条线
                p1 = p2;

                pictureBox1.Image = bitmap; //在控件上显示bitmap的内容
            }
        }

3.2清屏按钮

private void button1_Click(object sender, EventArgs e)  //清理屏幕按钮
        {
            g.Clear(Color.White); //清屏,用白色填充 Graphic.Clear(填充颜色)
            pictureBox1.Image = bitmap; //在控件上显示bitmap的内容
        }

3.3保存按钮

这个功能就可以按自己喜好随便写了…

using System.IO; //用于调用Directory.Exists(savePath)检查输入保存路径是否合法

String savePath;
const String wrongPathMessage = "输入路径错误,请重新输入";

private void button2_Click(object sender, EventArgs e)  //保存文件按钮
        {
            savePath = textBox1.Text; //获取文本框输入内容,作为保存路径
            if (Directory.Exists(savePath))
            {
                bitmap.Save(savePath + "\\test.jpg"); //文件保存 BitMap.Save(String保存路径)
                textBox1.Text = (savePath + " 保存成功!文件名为test.jpg");
            }
            else 
            {
                textBox1.Text = wrongPathMessage;
            }
        }

4.演示

绘画功能演示:
在这里插入图片描述

保存功能演示:
在这里插入图片描述

得到jpg
在这里插入图片描述

5.完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO; //用于调用Directory.Exists(savePath)检查输入保存路径是否合法

namespace DrawForms01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        bool is_pen_down = false;   //判断画笔是否落下
        bool is_first_point = true; //记录第一个点 即落笔位置
        Graphics g;     //绘图类的对象
        Point p1, p2;   //线段的两个点
        Pen pen1 = new Pen(Color.Red, 1);   //画笔,构造函数为Pen(颜色, 粗细)
        Bitmap bitmap;  //位图,用于直接绘图

        String savePath;
        const String wrongPathMessage = "输入路径错误,请重新输入";

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e) //鼠标按下
        {
            is_pen_down = true;
            is_first_point = true;
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e) //鼠标松开
        {
            is_pen_down = false;
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e) //鼠标移动
        {
            if(is_first_point)  //确定落笔时第一点位置
            {
                p1 = new Point(e.X, e.Y);
                is_first_point = false;
            }

            if(is_pen_down)
            {
                p2 = new Point(e.X, e.Y);
                g.DrawLine(pen1, p1, p2);   //画线,两点确定一条线
                p1 = p2;

                pictureBox1.Image = bitmap; //在控件上显示bitmap的内容
            }
        }

        private void button1_Click(object sender, EventArgs e)  //清理屏幕按钮
        {
            g.Clear(Color.White); //清屏,用白色填充 Graphic.Clear(填充颜色)
            pictureBox1.Image = bitmap; //在控件上显示bitmap的内容
        }

        private void button2_Click(object sender, EventArgs e)  //保存文件按钮
        {
            savePath = textBox1.Text; //获取文本框输入内容,作为保存路径
            if (Directory.Exists(savePath))
            {
                bitmap.Save(savePath + "\\test.jpg"); //文件保存 BitMap.Save(String保存路径)
                textBox1.Text = (savePath + " 保存成功!文件名为test.jpg");
            }
            else 
            {
                textBox1.Text = wrongPathMessage;
            }
        }

        private void PictureBox1_Resize(object sender, EventArgs e) //自定义 初始化事件
        {
            bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height); //初始化bitmap,大小等于pictureBox
            g = Graphics.FromImage(bitmap); //初始化Graphic g
        }
    }
}

6.参考资料

https://www.bilibili.com/video/BV1Q7411K7uX/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=560442f8860b37734820736760ee3bae

【bilibili】如何用C#编写简单的鼠标绘图软件_跳转链接

BV1Q7411K7uX

7.心得

GDI+主要就是研究两个类吧…一个BitMap一个Graphic(

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值