C#:小工具项目-画图板
1.实现思路一个变量 Bitmap 用于存储绘制的图片,鼠标的每次绘制都会保存到该变量。一个bool判断是否处于绘画状态主要用到控件 PictureBox 加两个按钮一个选择颜色,一个用于保存Bitmap图片,还加一个数字选择控件选择画笔大小。窗体加载时,Bitmap初始化为pictureBox大小,给 PictureBox设置Image为Bitmap,初始化画板为白色pic...
·
1.实现思路
一个变量 Bitmap 用于存储绘制的图片,鼠标的每次绘制都会保存到该变量。
一个bool判断是否处于绘画状态
主要用到控件 PictureBox 加两个按钮一个选择颜色,一个用于保存Bitmap图片,还加一个数字选择控件选择画笔大小。
- 窗体加载时,Bitmap初始化为pictureBox大小,给 PictureBox设置Image为Bitmap,初始化画板为白色
- pictureBox的监听事件,鼠标左键按下时,记录第一个点,及初始化用户设置的画笔,开启绘画状态
- pictureBox的监听事件,鼠标左键移动时(处于绘画状态),从Bitmap得到画板,绘制首尾直线到Bitmap,然后设置pictureBox的image为Bitmap进行显示。
- pictureBox的监听事件,鼠标左键释放时,结束绘画状态,此时所有的路径都已经绘制到了Bitmap。
- 点击保存按钮 选择一个文件夹,自定义文件名称,保存这个Bitmap。
2.代码如下:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;
namespace DrawingTest {
public partial class Form1 : Form {
int gw=0; //画板宽
int gh=0; //画板高
public Form1() {
InitializeComponent();
gw = this.pictureBox1.Width;
gh = this.pictureBox1.Height;
btmp = new Bitmap(gw,gh); //初始化图片
//初始化画板
g = Graphics.FromImage(btmp);
g.Clear(Color.White);
this.pictureBox1.Image = btmp;
g.Dispose();
}
//画图程序,所需变量如下:
Bitmap btmp; //绘制形成的图片,可以保存
Graphics g = null; //绘制画板
Pen p = null; //绘制画笔
int ps = 3; //画笔大小
Color pc = Color.Black; //画笔颜色
bool isDrawing = false; //是否正在画画状态,鼠标左键处于按下时表明正在画画状态,松开表明不在画画状态
float xx = 0; //画笔当前x坐标
float yy = 0; //画笔当前y坐标
//按钮-画笔颜色选择
private void colorSelect_Click(object sender, EventArgs e) {
if (this.colorDialog1.ShowDialog() == DialogResult.OK) {
pc = this.colorDialog1.Color;
}
}
//按钮-保存图片,可以设置格式
private void btmpSave_Click(object sender, EventArgs e) {
this.saveFileDialog1.Filter="(png)|*.png|(jpg)|*.jpg";
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK) {
String targetFn = this.saveFileDialog1.FileName;
btmp.Save(targetFn,ImageFormat.Png);
}
}
//控件-画笔大小选择
private void penSize_SelectedIndexChanged(object sender, EventArgs e) {
int size = Convert.ToInt32(this.penSize.SelectedItem.ToString());
switch (size) {
case 3:
ps = 3;
break;
case 5:
ps = 5;
break;
case 10:
ps = 10;
break;
default:
break;
}
}
//在画板上鼠标左键按下时
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {
xx = e.X;
yy = e.Y;
//设置用户的画笔
p = new Pen(pc, ps);
isDrawing = true;
}
}
//在画板上鼠标左键移动时
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) {
if ((isDrawing) && (e.Button == MouseButtons.Left)) {
g = Graphics.FromImage(btmp);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//设置抗锯齿
g.DrawLine(p, new Point((int)xx, (int)yy), new Point(e.X, e.Y)); //绘制到Bitmap
this.pictureBox1.Image = btmp; //在控件显示Bitmap
xx = e.X;
yy = e.Y;
g.Dispose();
}
}
//在画板上鼠标左键抬起时,得到最终图片
private void pictureBox1_MouseUp(object sender, MouseEventArgs e) {
if ( isDrawing && e.Button == MouseButtons.Left) {
isDrawing = false;
}
}
}
}
效果:
更多推荐
已为社区贡献13条内容
所有评论(0)