【自用存档】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(