三级项目“小画家益智画板”C#程序的总结

我刚刚完成本学期的三级项目:“小画家益智画板”。现在看来这个项目的思维算是比较简单清晰,不过也有一些涉及到GDI+的有关知识。我将在下面解释本项目的多个要点。
图像保存要点链接https://mp.csdn.net/postedit/103749717
以下为全部代码:
`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;

namespace 三级项目12_11
{
public partial class Form1 : Form
{
public BufferedGraphicsContext currentContext;//定义双缓冲区
public BufferedGraphics myBuffer;
Bitmap b;//声明一个bitmap
public Graphics gra;//声明一个graphics
Point Start, Prev, End;//声明三个点用来划线与定义矩形
int penWidth;//声明笔的宽度
Pen pen, erase;//声明笔与橡皮
Color penColor;//声明笔的颜色
SolidBrush brush;//声明刷子用于填充
bool down = false;//判断是否点击
int point = 1;//point用于给保存的图片编号
int po = 0;//po用于给录制过程的步骤编号
string[,] data;//声明一个二维数组来保存录制过程的每一步的数据来输出
bool vidiook = false;//判断是否开始录制
FileStream fs;//声明一个文件流
int pp = 1;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{

        Form2 mdiChild = new Form2(this);//首先显示From2
        mdiChild.ShowDialog();
        b = new Bitmap(1024, 661);//实例化一个bitmap b
        gra = Graphics.FromImage(b);//将b的图像给gra
        toolStripStatusLabel2.Text = "画笔";//在左下角显示当前的画笔、颜色、粗细、鼠标位置等信息
        toolStripStatusLabel3.Text = "黑色";
        toolStripStatusLabel5.BackColor = Color.Black;
        penWidth = 1;//定义初始的画笔宽度与颜色
        penColor = Color.Black;
        CreateNewPenAndBrush();
        erase = new Pen(Color.White, 20);//定义橡皮的颜色与宽度
        currentContext = BufferedGraphicsManager.Current;//双缓冲区
        Rectangle rect = pictureBox1.ClientRectangle;
        myBuffer = currentContext.Allocate(gra,
          rect);
        myBuffer.Graphics.Clear(pictureBox1.BackColor);
        data = new string[100000, 5];//将一个1000*5的二维数组实例化
    }
    private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
    {

        Start.X = e.X;//获取鼠标按下的位置
        Start.Y = e.Y;
        Prev = Start;
        down = true;
        data[po, 1] = Start.X.ToString() + "," + Start.Y.ToString();//将初始位置写在data数组中
    }

    private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        toolStripStatusLabel1.Text = "X:" + e.X.ToString()
            + ",Y:" + e.Y.ToString();//将当前位置显示在左下角
        if (down)
        {
            Prev = e.Location;
            CreateNewPenAndBrush();
            Rectangle rect = Rectangle.Union(new Rectangle(Start, new Size(0, 0)),
                   new Rectangle(Prev, new Size(0, 0)));//利用初始位置与当前位置划矩形rect
            switch (toolStripStatusLabel2.Text)
            {
                case "画笔":
                    End.X = e.X;
                    End.Y = e.Y;
                    myBuffer.Graphics.DrawLine(pen, Start, End);//利用drawline连续划线实现画笔功能
                    myBuffer.Render();//双缓冲区
                    Start = End;
                    data[po, 0] = "画笔";//将画笔种类、当前位置、颜色与粗细写在data里
                    data[po, 2] = End.X.ToString() + "," + End.Y.ToString();
                    data[po, 3] = System.Drawing.ColorTranslator.ToHtml(penColor);
                    data[po, 4] = penWidth.ToString();
                    po++;//开始下一个步骤
                    break;
                case "直线":
                    myBuffer.Render();
                    gra.DrawLine(pen, Start, Prev);//实现直线跟随拖动
                    break;
                case "长方形":
                    myBuffer.Render();
                    gra.DrawRectangle(pen, rect);
                    break;
                case "橡皮":
                    myBuffer.Render();
                    End.X = e.X;
                    End.Y = e.Y;
                    myBuffer.Graphics.DrawLine(erase, Start, End);
                    myBuffer.Render();
                    Start = End;
                    break;
                case "椭圆":
                    myBuffer.Render();
                    gra.DrawEllipse(pen, rect);
                    break;
                case "填充矩形":
                    myBuffer.Render();
                    gra.FillRectangle(brush, rect);
                    break;
                case "填充椭圆":
                    myBuffer.Render();
                    gra.FillEllipse(brush, rect);
                    break;
                case "文字":
                    myBuffer.Render();
                    Pen wenzi = new Pen(Color.Blue,1);
                    gra.DrawRectangle(wenzi, rect);
                    break;
            }
        }
        gra.Save();
        pictureBox1.Image = b;
    }
    private void PictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        if (down)
        {
            End.X = e.X;
            End.Y = e.Y;
            CreateNewPenAndBrush();
            Rectangle rect = Rectangle.Union(new Rectangle(Start, new Size(0, 0)),
                 new Rectangle(Prev, new Size(0, 0)));
            switch (toolStripStatusLabel2.Text)
            {
                case "画笔":
                    End.X = e.X;
                    End.Y = e.Y;
                    myBuffer.Graphics.DrawLine(pen, Start, End);//在gra上绘出直线
                    data[po, 0] = "画笔";//将画笔种类存入data
                    break;

                case "直线":
                    myBuffer.Graphics.DrawLine(pen, Start, Prev);
                    data[po, 0] = "直线";
                    break;
                case "长方形":
                    myBuffer.Graphics.DrawRectangle(pen, rect);
                    data[po, 0] = "长方形";
                    break;
                case "橡皮":
                    End.X = e.X;
                    End.Y = e.Y;
                    myBuffer.Graphics.DrawLine(erase, Start, End);
                    Start = End;
                    data[po, 0] = "橡皮";
                    break;
                case "椭圆":
                    myBuffer.Graphics.DrawEllipse(pen, rect);
                    data[po, 0] = "椭圆";
                    break;
                case "填充矩形":
                    myBuffer.Graphics.FillRectangle(brush, rect);
                    data[po, 0] = "填充矩形";
                    break;
                case "填充椭圆":
                    myBuffer.Graphics.FillEllipse(brush, rect);
                    data[po, 0] = "填充椭圆";
                    break;
                case "文字":
                    textBox1.Visible = true;
                    button23.Visible = true;
                    gra.Save();
                    pictureBox1.Image = b;
                    break;
            }
            down = false;

            data[po, 2] = End.X.ToString() + "," + End.Y.ToString();//将结束点存入data
            data[po, 3] = System.Drawing.ColorTranslator.ToHtml(penColor);
            data[po, 4] = penWidth.ToString();
            po++;
        }
        gra.Save();
        pictureBox1.Image = b;
    }

    private void Button2_Click(object sender, EventArgs e)
    {
        toolStripStatusLabel2.Text = "直线";//左下角显示内容
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        toolStripStatusLabel2.Text = "画笔";
    }

    private void Button3_Click(object sender, EventArgs e)
    {
        toolStripStatusLabel2.Text = "长方形";
    }

    private void Button6_Click(object sender, EventArgs e)
    {
        toolStripStatusLabel2.Text = "橡皮";
    }

    private void Button5_Click(object sender, EventArgs e)
    {
        toolStripStatusLabel2.Text = "文字";
    }

    private void Button4_Click(object sender, EventArgs e)
    {
        toolStripStatusLabel2.Text = "椭圆";
    }

    private void Button19_Click_1(object sender, EventArgs e)
    {
        toolStripStatusLabel2.Text = "填充矩形";
    }

    private void Button20_Click(object sender, EventArgs e)
    {
        toolStripStatusLabel2.Text = "填充椭圆";
    }

    private void Button7_Click(object sender, EventArgs e)
    {
        penColor = Color.Black;//更改画笔颜色
        toolStripStatusLabel3.Text = "黑色";//左下角显示当前颜色
        toolStripStatusLabel5.BackColor = Color.Black;//改变左下角一个toolstripstatuslable的backcolor
    }

    private void Button8_Click(object sender, EventArgs e)
    {
        penColor = Color.Red;
        toolStripStatusLabel3.Text = "红色";
        toolStripStatusLabel5.BackColor = Color.Red;
    }

    private void Button9_Click(object sender, EventArgs e)
    {
        penColor = Color.White;
        toolStripStatusLabel3.Text = "白色";
        toolStripStatusLabel5.BackColor = Color.White;
    }

    private void Button10_Click(object sender, EventArgs e)
    {
        penColor = Color.Yellow;
        toolStripStatusLabel3.Text = "黄色";
        toolStripStatusLabel5.BackColor = Color.Yellow;
    }

    private void Button11_Click(object sender, EventArgs e)
    {
        penColor = Color.Blue;
        toolStripStatusLabel3.Text = "蓝色";
        toolStripStatusLabel5.BackColor = Color.Blue;
    }

    private void Button12_Click(object sender, EventArgs e)
    {
        penColor = Color.Green;
        toolStripStatusLabel3.Text = "绿色";
        toolStripStatusLabel5.BackColor = Color.Green;
    }

    private void Button16_Click(object sender, EventArgs e)
    {
        penColor = Color.Pink;
        toolStripStatusLabel3.Text = "粉色";
        toolStripStatusLabel5.BackColor = Color.Pink;
    }

    private void Button17_Click(object sender, EventArgs e)
    {
        penColor = Color.Brown;
        toolStripStatusLabel3.Text = "棕色";
        toolStripStatusLabel5.BackColor = Color.Brown;
    }

    private void Button18_Click(object sender, EventArgs e)
    {
        colorDialog1.ShowDialog();//用colordialog窗体控件显示更多颜色
        penColor = this.colorDialog1.Color;
        toolStripStatusLabel3.Text = colorDialog1.Color.ToString();//将所选颜色显示到左下角
        toolStripStatusLabel5.BackColor = this.colorDialog1.Color;//改变左下角一个toolstripstatuslable的backcolor
    }

    private void Button13_Click(object sender, EventArgs e)
    {
        penWidth = 1;//更换画笔的宽度
        toolStripStatusLabel4.Text = "细";//在左下角显示当前的宽度
    }

    private void Button14_Click(object sender, EventArgs e)
    {
        penWidth = 3;
        toolStripStatusLabel4.Text = "中";
    }

    private void Button15_Click(object sender, EventArgs e)
    {
        penWidth = 5;
        toolStripStatusLabel4.Text = "粗";
    }

    
    private void TrackBar1_Scroll(object sender, EventArgs e)
    {
        penWidth = this.trackBar1.Value;//利用窗体控件trackbar调节画笔宽度
        if (this.trackBar1.Value == 1)
            toolStripStatusLabel4.Text = "细";
        else if (this.trackBar1.Value == 3)
            toolStripStatusLabel4.Text = "中";
        else if (this.trackBar1.Value == 5)
            toolStripStatusLabel4.Text = "粗";
        else
            toolStripStatusLabel4.Text = trackBar1.Value.ToString();
    }
    private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)//此部分实现所化内容的保存
    {
        Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);//首先初始化一个与pictbox同样大小的bitma
        pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));//使用picturebox的drawtobitmap方法将所画的内容截屏到bmp
        saveFileDialog1.Filter = "Jpg 图片|*.jpg|Bmp 图片|*.bmp|Gif 图片|*.gif|Png 图片|*.png|Wmf  图片|*.wmf";//使用savefiledialog保存,保存为指定的图片格式
        saveFileDialog1.FileName = "mytext" + point.ToString();//设置预设的文件名称
        point++;//下次保存文件的文件名改变
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            bmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);//将bmp保存在选定的位置
            MessageBox.Show(this, "图片保存成功!", "信息提示");//小窗口显示保存成功
        }
    }

    private void 打开OToolStripMenuItem_Click(object sender, EventArgs e)//此部分实现图片文件打开到画板上
    {
        OpenFileDialog dialog = new OpenFileDialog();//使用openfiledialog控件进行打开操作
        dialog.Filter = "图片文件(*.png;*.jpg;*.bmp;*.jpeg)|*.png;*.jpg;*.bmp;*.jpeg";//只能打开特定格式的图片文件
        if (dialog.ShowDialog() == DialogResult.OK)//如果点击确定
        {
            Image gg = Image.FromFile(dialog.FileName);//新定义一个image来过渡图片
            myBuffer.Graphics.DrawImage(gg,0,0);//将gg画在双缓冲区
            myBuffer.Render();//把所选图片附给picturebox
            gra.Save();//保存图片
            pictureBox1.Image = b;//绘在pictbox上
        }
    }

    private void 自定义CToolStripMenuItem_Click(object sender, EventArgs e)
    {
        //定义开始录制过程
        po = 0;
        选项OToolStripMenuItem.Visible = true;//将看不见“开始录制”选项,只能看到“结束录制”
        自定义CToolStripMenuItem.Visible = false;
        vidiook = true;//告知后面开始录制
        fs = new FileStream("过程.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);//新建或覆盖文档“过程.txt"
    }

    private void 读取过程pToolStripMenuItem_Click(object sender, EventArgs e)
    {
        button21.Visible = true;//显示被隐藏的“下一步”按钮
    }

    private void 新建NToolStripMenuItem_Click(object sender, EventArgs e)//此部分新建一个新的画布
    {
        Rectangle re = new Rectangle(0, 0, 1024, 661);//新建一个picturebox大小的矩形
        Brush bru = new SolidBrush(Color.White);//设定一个白色的刷子
        myBuffer.Graphics.FillRectangle(bru, re);//用白色的填充矩形覆盖实现新建
        myBuffer.Render();
        gra.Save();
        pictureBox1.Image = b;
    }

    private void Button21_Click(object sender, EventArgs e)//此部分实现读取
    {
        StreamReader sr = new StreamReader("过程.txt", Encoding.Default);//定义一个读取器
        try
        {
            string op = "";
            for (int i = 0; i < pp; i++)//读取第po行的信息
            {
                op = sr.ReadLine();
            }
            string[] vs = op.Split(' ');
            Start.X = int.Parse(vs[1].Substring(0, vs[1].IndexOf(',')));//将信息还原为点,画笔类型,颜色,宽度
            Start.Y = int.Parse(vs[1].Substring(vs[1].IndexOf(',') + 1));
            End.X = int.Parse(vs[2].Substring(0, vs[2].IndexOf(',')));
            End.Y = int.Parse(vs[2].Substring(vs[2].IndexOf(',') + 1));
            penColor = System.Drawing.ColorTranslator.FromHtml(vs[3]);
            penWidth = int.Parse(vs[4]);
            CreateNewPenAndBrush();//更新画笔
            Size size = new Size(End.X - Start.X, End.Y - Start.Y);
            Rectangle rect = new Rectangle(Start, size);
            switch (vs[0])
            {
                case "画笔":
                    myBuffer.Graphics.DrawLine(pen, Start, End);
                    break;
                case "直线":
                    myBuffer.Graphics.DrawLine(pen, Start, End);
                    break;
                case "长方形":
                    myBuffer.Graphics.DrawRectangle(pen, rect);
                    break;
                case "橡皮":
                    myBuffer.Graphics.DrawLine(erase, Start, End);
                    break;
                case "椭圆":
                    myBuffer.Graphics.DrawEllipse(pen, rect);
                    break;
                case "填充矩形":
                    myBuffer.Graphics.FillRectangle(brush, rect);
                    break;
                case "填充椭圆":
                    myBuffer.Graphics.FillEllipse(brush, rect);
                    break;
            }
            pp++;//准备读取下一步
            myBuffer.Render();//将读取结果显示在画布上
            gra.Save();
            pictureBox1.Image = b;
        }
        finally
        {
            sr.Close();//关闭streamreader
        }
    }

    private void Button23_Click(object sender, EventArgs e)//此部分实现文字的写入
    {
        CreateNewPenAndBrush();//更换画笔
        PointF pointF=new PointF();//定义新的浮点数位置以使用drawstring
        pointF.X = (float)Start.X;
        pointF.Y = (float)Start.Y;
        Font font = new Font("宋体", 9);//确定文字的字体
        myBuffer.Graphics.DrawString(textBox1.Text,font,brush,pointF);//将文字显示在双缓冲区
        gra.Save();
        pictureBox1.Image = b;
        button23.Visible = false;//隐藏textbox,button,使之只在点击文字是出现
        textBox1.Visible = false;

    }

    private void 撤消UToolStripMenuItem_Click(object sender, EventArgs e)
    {
        po--;//返回上一个过程
        Color color = Color.White;
        Pen newpen;//定义白色与白色的画笔刷子,以实现覆盖
        newpen = new Pen(color, penWidth);
        Brush newbrush = new SolidBrush(color);
        Start.X = int.Parse(data[po, 1].Substring(0, data[po, 1].IndexOf(',')));//读取上一过程的信息
        Start.Y = int.Parse(data[po, 1].Substring(data[po, 1].IndexOf(',') + 1));
        End.X = int.Parse(data[po, 2].Substring(0, data[po, 2].IndexOf(',')));
        End.Y = int.Parse(data[po, 2].Substring(data[po, 2].IndexOf(',') + 1));
        Size size = new Size(End.X - Start.X, End.Y - Start.Y);
        Rectangle rect = new Rectangle(Start, size);
        switch (data[po, 0])
        {
            case "画笔":
                myBuffer.Graphics.DrawLine(newpen, Start, End);
                break;
            case "直线":
                myBuffer.Graphics.DrawLine(newpen, Start, End);
                break;
            case "长方形":
                myBuffer.Graphics.DrawRectangle(newpen, rect);
                break;
            case "橡皮":
                myBuffer.Graphics.DrawLine(erase, Start, End);
                break;
            case "椭圆":
                myBuffer.Graphics.DrawEllipse(newpen, rect);
                break;
            case "填充矩形":
                myBuffer.Graphics.FillRectangle(newbrush, rect);
                break;
            case "填充椭圆":
                myBuffer.Graphics.FillEllipse(newbrush, rect);
                break;
        }
        myBuffer.Render();
        gra.Save();
        pictureBox1.Image = b;
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (button21.Visible == true)
        {
            if (e.KeyCode == Keys.Enter)
            {
                StreamReader sr = new StreamReader("过程.txt", Encoding.Default);//定义一个读取器
                try
                {
                    string op = "";
                    for (int i = 0; i < pp; i++)//读取第po行的信息
                    {
                        op = sr.ReadLine();
                    }
                    string[] vs = op.Split(' ');
                    Start.X = int.Parse(vs[1].Substring(0, vs[1].IndexOf(',')));//将信息还原为点,画笔类型,颜色,宽度
                    Start.Y = int.Parse(vs[1].Substring(vs[1].IndexOf(',') + 1));
                    End.X = int.Parse(vs[2].Substring(0, vs[2].IndexOf(',')));
                    End.Y = int.Parse(vs[2].Substring(vs[2].IndexOf(',') + 1));
                    penColor = System.Drawing.ColorTranslator.FromHtml(vs[3]);
                    penWidth = int.Parse(vs[4]);
                    CreateNewPenAndBrush();//更新画笔
                    Size size = new Size(End.X - Start.X, End.Y - Start.Y);
                    Rectangle rect = new Rectangle(Start, size);
                    switch (vs[0])
                    {
                        case "画笔":
                            myBuffer.Graphics.DrawLine(pen, Start, End);
                            break;
                        case "直线":
                            myBuffer.Graphics.DrawLine(pen, Start, End);
                            break;
                        case "长方形":
                            myBuffer.Graphics.DrawRectangle(pen, rect);
                            break;
                        case "橡皮":
                            myBuffer.Graphics.DrawLine(erase, Start, End);
                            break;
                        case "椭圆":
                            myBuffer.Graphics.DrawEllipse(pen, rect);
                            break;
                        case "填充矩形":
                            myBuffer.Graphics.FillRectangle(brush, rect);
                            break;
                        case "填充椭圆":
                            myBuffer.Graphics.FillEllipse(brush, rect);
                            break;
                    }
                    pp++;//准备读取下一步
                    myBuffer.Render();//将读取结果显示在画布上
                    gra.Save();
                    pictureBox1.Image = b;
                }
                finally
                {
                    sr.Close();//关闭streamreader
                }
            }
        }
        if (e.Control && e.KeyCode == Keys.A)
        {
            Rectangle re = new Rectangle(0, 0, 1024, 661);//新建一个picturebox大小的矩形
            Brush bru = new SolidBrush(Color.White);//设定一个白色的刷子
            myBuffer.Graphics.FillRectangle(bru, re);//用白色的填充矩形覆盖实现新建
            myBuffer.Render();
            gra.Save();
            pictureBox1.Image = b;
            }
        if (e.Control && e.KeyCode == Keys.D)
        {
            OpenFileDialog dialog = new OpenFileDialog();//使用openfiledialog控件进行打开操作
            dialog.Filter = "图片文件(*.png;*.jpg;*.bmp;*.jpeg)|*.png;*.jpg;*.bmp;*.jpeg";//只能打开特定格式的图片文件
            if (dialog.ShowDialog() == DialogResult.OK)//如果点击确定
            {
                Image gg = Image.FromFile(dialog.FileName);//新定义一个image来过渡图片
                myBuffer.Graphics.DrawImage(gg, 0, 0);//将gg画在双缓冲区
                myBuffer.Render();//把所选图片附给picturebox
                gra.Save();//保存图片
                pictureBox1.Image = b;//绘在pictbox上
            }
        }
        if (e.Control && e.KeyCode == Keys.S)
        {
            Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);//首先初始化一个与pictbox同样大小的bitma
            pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));//使用picturebox的drawtobitmap方法将所画的内容截屏到bmp
            saveFileDialog1.Filter = "Jpg 图片|*.jpg|Bmp 图片|*.bmp|Gif 图片|*.gif|Png 图片|*.png|Wmf  图片|*.wmf";//使用savefiledialog保存,保存为指定的图片格式
            saveFileDialog1.FileName = "mytext" + point.ToString();//设置预设的文件名称
            point++;//下次保存文件的文件名改变
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                bmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);//将bmp保存在选定的位置
                MessageBox.Show(this, "图片保存成功!", "信息提示");//小窗口显示保存成功
            }
        }
    }

    private void 退出XToolStripMenuItem_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void Button22_Click(object sender, EventArgs e)
    {
        Form3 mdiChild = new Form3(this);//首先显示From2
        mdiChild.ShowDialog();
        button22.Visible = false;
        button24.Visible = true;
        Rectangle re = new Rectangle(0, 0, 1024, 661);//新建一个picturebox大小的矩形
        Brush bru = new SolidBrush(Color.White);//设定一个白色的刷子
        myBuffer.Graphics.FillRectangle(bru, re);//用白色的填充矩形覆盖实现新建
        myBuffer.Render();
        gra.Save();
        pictureBox1.Image = b;
    }

    private void Button24_Click(object sender, EventArgs e)
    {
        Form4 mdiChild = new Form4(this);//首先显示From2
        mdiChild.ShowDialog();
        this.Close();
    }

    private void 重复RToolStripMenuItem_Click(object sender, EventArgs e)
    {
        po--;//回到上一个过程
        Pen newpen;
        newpen = new Pen(penColor, penWidth);//沿用上一步的颜色与宽度
        Brush newbrush = new SolidBrush(penColor);
        Start.X = int.Parse(data[po, 1].Substring(0, data[po, 1].IndexOf(',')));//读取上一过程的信息
        Start.Y = int.Parse(data[po, 1].Substring(data[po, 1].IndexOf(',') + 1));
        End.X = int.Parse(data[po, 2].Substring(0, data[po, 2].IndexOf(',')));
        End.Y = int.Parse(data[po, 2].Substring(data[po, 2].IndexOf(',') + 1));
        Size size = new Size(End.X - Start.X, End.Y - Start.Y);
        Rectangle rect = new Rectangle(Start, size);
        switch (data[po, 0])//对上一过程重绘
        {
            case "画笔":
                myBuffer.Graphics.DrawLine(newpen, Start, End);
                break;
            case "直线":
                myBuffer.Graphics.DrawLine(newpen, Start, End);
                break;
            case "长方形":
                myBuffer.Graphics.DrawRectangle(newpen, rect);
                break;
            case "橡皮":
                myBuffer.Graphics.DrawLine(erase, Start, End);
                break;
            case "椭圆":
                myBuffer.Graphics.DrawEllipse(newpen, rect);
                break;
            case "填充矩形":
                myBuffer.Graphics.FillRectangle(newbrush, rect);
                break;
            case "填充椭圆":
                myBuffer.Graphics.FillEllipse(newbrush, rect);
                break;
        }
        myBuffer.Render();
        gra.Save();
        pictureBox1.Image = b;
    }

    private void 选项OToolStripMenuItem_Click(object sender, EventArgs e)//此部分实现录制过程的存入
    {
        if(vidiook)
        {
            StreamWriter sw = new StreamWriter(fs, Encoding.Default);//声明一个streamwrite用于将文件存入
            try
            {
                for (int i = 0; i < 100000; i++)
                {
                    if (data[i, 0] != null)//逐条将data的内容writeline入“过程.txt”
                    {
                        sw.WriteLine(data[i, 0] + " " + data[i, 1] + " " + data[i, 2]+" "+data[i,3]+" "+data[i,4]);
                    }
                    else
                        break;
                }
            }
            finally
            {
                sw.Close();
                fs.Close();
            }
        }
    }

    void CreateNewPenAndBrush()
    {
        pen = new Pen(penColor, penWidth);//定义方法更换画笔的颜色与宽度            
        brush = new SolidBrush(penColor);
    }
}

}
`

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值