C#内部并没有提供橡皮擦功能所以,只能使用画笔和颜色填充来实现橡皮擦和清空画板功能。
此次小编写了一个简易的画板功能其中包含橡皮擦,清空面板,在窗体运行中修改画笔颜色和像素等功能。
代码如下:
using Sunny.UI;
using Sunny.UI.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.LinkLabel;
namespace 画板完整版
{
public partial class Form1 : UIForm
{
// 定义绘制对象
Graphics g;
Bitmap bmp;
// 起点坐标
Point start; bool flag = false;
// 画笔颜色
Color c1 = Color.Black;
//画笔粗细
int size = 1;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile("./1.png");
bmp = (Bitmap)pictureBox1.Image.Clone();
g = Graphics.FromImage(bmp);
// 默认主题
this.uiComboBox1.SelectedIndex = 0;
this.uiStyleManager1.Style = (UIStyle)Enum.Parse(typeof(UIStyle), this.uiComboBox1.SelectedItem.ToString());
// 默认画笔像素
this.uiComboBox2.SelectedIndex = 0;
// 设置XY轴默认像素
this.uiLabel1.Text = "像素: { X:" + "0" + ",Y:" + "0 }";
// 时间
timer1.Interval = 1000;
timer1.Enabled = true;
this.time.Text = "北京时间: " + (DateTime.Now).Year + "年" + (DateTime.Now).Month + "月" + (DateTime.Now).Day + "日" + (DateTime.Now).Hour + "时" + (DateTime.Now).Minute + "分" + (DateTime.Now).Second + "秒";
}
// 时间
private void timer1_Tick(object sender, EventArgs e)
{
this.time.Text = "北京时间: " + (DateTime.Now).Year + "年" + (DateTime.Now).Month + "月" + (DateTime.Now).Day + "日" + (DateTime.Now).Hour + "时" + (DateTime.Now).Minute + "分" + (DateTime.Now).Second + "秒";
}
// 修改主题
private void uiComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
this.uiStyleManager1.Style = (UIStyle)Enum.Parse(typeof(UIStyle), this.uiComboBox1.SelectedItem.ToString());
}
// 清空画板
private void uiSymbolButton2_Click(object sender, EventArgs e)
{
Point[] p =
{
new Point(-2,-2),
new Point(810,-2),
new Point(810,515),
new Point(-2,515),
new Point(-2,-2)
};
g.FillPolygon(Brushes.White, p);
pictureBox1.Image = bmp;
}
// 设置画笔
private void uiSymbolButton3_Click(object sender, EventArgs e)
{
if(s==0&&co==null)return;
size = s; c1 = co;
this.uiComboBox2.Text = size.ToString();
}
// 画笔颜色
private void uiButton1_Click(object sender, EventArgs e)
{
DialogResult r = colorDialog1.ShowDialog();
if (r == DialogResult.OK)
{
c1 = colorDialog1.Color;
}
}
// 画笔粗细
private void uiComboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
size = int.Parse(uiComboBox2.SelectedItem.ToString());
}
// 鼠标按下的方法,主要是获取按下时候的坐标也就是起点坐标
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)// 点击了鼠标左键
{
start = e.Location; // 当前点击的坐标
flag = true;
}
}
// 鼠标移动的时候获取点,获取会追的结束点,并且划线
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
this.uiLabel1.Text = "像素: {X:" + e.X + ",Y:" +e.Y+"}";
if (flag == false) return;
g.DrawLine(new Pen(c1, size), start, e.Location);
start = e.Location;// 重置起始点
pictureBox1.Image = bmp;
}
// 结束绘制
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
flag = false;
pictureBox1.Image = bmp;
}
// 橡皮
int s = 0;
Color co;
private void uiSymbolButton1_Click(object sender, EventArgs e)
{
s = size; co = c1;
size = 20;
c1 = Color.White;
this.uiComboBox2.Text = size.ToString();
}
// 保存
private void uiSymbolButton4_Click(object sender, EventArgs e)
{
if(bmp == null) return;
SaveFileDialog sf = new SaveFileDialog(); // 保存对话框
sf.Filter = "图像文件|*.png|jpg图片|*.jpg";
if (sf.ShowDialog() == DialogResult.OK)
{
bmp.Save(sf.FileName, ImageFormat.Png); //
MessageBox.Show("保存至" + sf.FileName, "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}