欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實(shí)現(xiàn)簡(jiǎn)易畫圖板的示例代碼

 更新時(shí)間:2021年04月19日 09:52:33   作者:向光飛翔  
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)易畫圖板的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

編程環(huán)境

VS2019、C#

畫板功能演示

實(shí)現(xiàn)簡(jiǎn)單畫圖

在這里插入圖片描述

打開功能
可打開jpg格式的文件

在這里插入圖片描述

保存功能
可將繪畫的內(nèi)容保存為jpg文件

在這里插入圖片描述

顏色選擇功能
用戶可自由選擇所需的顏色

在這里插入圖片描述

粗細(xì)選擇功能
提供四種型號(hào)的畫筆供用戶選擇

在這里插入圖片描述

清空畫布功能
點(diǎn)擊清空后提示是否清空

在這里插入圖片描述

選擇確定則將畫布清空,效果如下圖所示

在這里插入圖片描述

功能實(shí)現(xiàn)過(guò)程

定義公共變量

用于多個(gè)窗體之間共同使用數(shù)據(jù)

public class TempData
    {
        //用于多個(gè)窗體共同使用的數(shù)據(jù)
            public static int size=5;
        public static SolidBrush solidBrush=new SolidBrush(Color.Black);
        public static Graphics p;
    }

繪圖需要畫筆和畫布

創(chuàng)建畫布對(duì)象

     bm = new Bitmap(panel1.Width, panel1.Height);
     panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));

創(chuàng)建畫筆對(duì)象

   SolidBrush solidBrush=new SolidBrush(Color.Black);

實(shí)現(xiàn)對(duì)鼠標(biāo)行為的捕捉

定義一個(gè)bool的變量paint,用于指示是否開始作畫,但其值為true時(shí)開始作畫,為false時(shí)結(jié)束作畫

鼠標(biāo)左鍵按下則:使paint值變?yōu)閠rue

private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            paint = true;//開始畫畫
        }

鼠標(biāo)左鍵松開則:使paint值變?yōu)閒alse

private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
            paint = false;//結(jié)束畫畫
        }

繪制圖形

paint為true時(shí)

e.x、e.y用來(lái)獲取鼠標(biāo)的坐標(biāo),便于在對(duì)應(yīng)的地方進(jìn)行繪制

用radioButton1.Checked(畫筆)進(jìn)一步判斷是否選中畫筆,選中畫筆則在鼠標(biāo)移動(dòng)的位置畫上相應(yīng)的線條

if (paint && radioButton1.Checked)
            {
                TempData.p.FillEllipse(TempData.solidBrush, e.X, e.Y, TempData.size, TempData.size);
                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));
            }

用radioButton2.Checked(橡皮)進(jìn)一步判斷是否選中橡皮,選中橡皮則在鼠標(biāo)移動(dòng)的位置擦去相應(yīng)的線條

if (paint && radioButton2.Checked)
            {
                TempData.p.FillEllipse(new SolidBrush(Color.White), e.X, e.Y, 30, 30);
                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));
            }

用兩個(gè)單選按鈕控件radioButton(只可以選擇其中一個(gè))來(lái)分別表示畫筆和橡皮

paint為false時(shí)

不響應(yīng)畫畫與擦除操作

鼠標(biāo)按下左鍵且移動(dòng)時(shí):

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            TempData.p = Graphics.FromImage(bm);//用bm來(lái)創(chuàng)建一個(gè)新的畫布
            if (paint && radioButton1.Checked)
            {
                TempData.p.FillEllipse(TempData.solidBrush, e.X, e.Y, TempData.size, TempData.size);
                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));
            }
            else if (paint && radioButton2.Checked)
            {
                TempData.p.FillEllipse(new SolidBrush(Color.White), e.X, e.Y, 30, 30);
                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));
            }
        }

畫筆粗細(xì)的選擇

使用單選按鈕控件實(shí)現(xiàn)用戶畫筆粗細(xì)的選擇

首先定義了一個(gè)類,里面包含公共的變量size,size即為畫筆的粗細(xì)

選擇不同的radioButton則對(duì)size賦不同的值,用if_else_語(yǔ)句實(shí)現(xiàn)

private void button1_Click(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                MessageBox.Show("你選擇了小號(hào)畫筆", "信息提示", MessageBoxButtons.OK);
                TempData.size = 5;
            }
            else if (radioButton2.Checked)
            {
                MessageBox.Show("你選擇了中號(hào)畫筆", "信息提示", MessageBoxButtons.OK);
                TempData.size = 10;
            }
            else if (radioButton3.Checked)
            {
                MessageBox.Show("你選擇了大號(hào)畫筆", "信息提示", MessageBoxButtons.OK);
                TempData.size = 15;
            }
            else
            {
                MessageBox.Show("你選擇了刷子", "信息提示", MessageBoxButtons.OK);
                TempData.size = 20;
            }
            this.Close();//關(guān)閉當(dāng)前窗口
        }

MessageBox.Show(“提示內(nèi)容”, “提示框名稱”, 按鍵模式);用于展示提示內(nèi)容

this.Close();用于關(guān)閉當(dāng)前窗口

畫筆顏色的選擇

對(duì)顏色對(duì)話框的調(diào)用

用語(yǔ)句TempData.solidBrush = new SolidBrush(colorDialog1.Color);將選擇的顏色設(shè)置到畫筆中

private void 顏色ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            TempData.solidBrush = new SolidBrush(colorDialog1.Color);
        }

打開文件

對(duì)打開文件對(duì)話框的調(diào)用

可打開jpg格式的文件,由打開文件對(duì)話框的返回值確定是否執(zhí)行將jpg設(shè)置為畫板的背景的功能

private void 打開ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bool open = false;
            openFileDialog1.FileName = "";
            openFileDialog1.Filter = "JPG File(*.jpg)|*.JPG";
            DialogResult r = openFileDialog1.ShowDialog();//打開文件對(duì)話框并返回值
            if (r.ToString() == "OK") open = true;//ToString()用于將值轉(zhuǎn)化為其等價(jià)的字符串形式
            if (open)
            {
                panel1.BackgroundImage = Image.FromFile(openFileDialog1.FileName);//設(shè)置畫布的背景圖片
            }
        }

保存文件

對(duì)保存文件對(duì)話框的調(diào)用

用語(yǔ)句bm.Save(saveFileDialog1.FileName);將畫布bm上的內(nèi)容存在指定位置存為jpg文件,saveFileDialog1.FileName為文件的名稱

 private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter = "JPG File(*.jpg)|*.JPG";//設(shè)置保存的格式為jpg
            if(saveFileDialog1.ShowDialog()==System.Windows.Forms.DialogResult.OK)
            {
                bm.Save(saveFileDialog1.FileName);//直接將bm保存為jpg格式
            }   
        }

清空畫布

定義一個(gè)bool類型的變量clear用于指示是否將內(nèi)容清空,當(dāng)clear值為true時(shí)清空畫布,否則不清空

為了防止用戶操作失誤使得內(nèi)容被清空,加上下面的代碼,當(dāng)用戶按下確定鍵時(shí)才將clear改為true,即清空畫布

DialogResult r = MessageBox.Show("確定將清空畫布內(nèi)容?", "提示", MessageBoxButtons.OKCancel);
            if (r.ToString() == "OK") clear = true;

清空畫布即用一張白色的畫布覆蓋之前全部?jī)?nèi)容

        TempData.p.Clear(Color.White);
panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));//重新繪制畫板

清空畫布完整代碼

private void 清空ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult r = MessageBox.Show("確定將清空畫布內(nèi)容?", "提示", MessageBoxButtons.OKCancel);
            //DialogResult用于指示對(duì)話框中的返回值
            //后者返回值為OK、Cancel、Yes、No是由具體規(guī)定而定的
            if (r.ToString() == "OK") clear = true;//ToString()用于將值轉(zhuǎn)化為其等價(jià)的字符串形式
            if (clear)
            {
                TempData.p.Clear(Color.White);
                panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));//重新繪制畫板
                clear = false;
            }
        }

到此這篇關(guān)于C#實(shí)現(xiàn)簡(jiǎn)易畫圖板的示例代碼的文章就介紹到這了,更多相關(guān)C# 畫圖板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#調(diào)用百度API實(shí)現(xiàn)活體檢測(cè)的方法

    C#調(diào)用百度API實(shí)現(xiàn)活體檢測(cè)的方法

    這篇文章主要給大家介紹了關(guān)于C#調(diào)用百度API實(shí)現(xiàn)活體檢測(cè)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • C#實(shí)現(xiàn)自定義windows系統(tǒng)日志的方法

    C#實(shí)現(xiàn)自定義windows系統(tǒng)日志的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)自定義windows系統(tǒng)日志的方法,涉及C#針對(duì)windows系統(tǒng)日志的創(chuàng)建、讀寫及刪除技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 淺談C# winForm 窗體閃爍的問(wèn)題

    淺談C# winForm 窗體閃爍的問(wèn)題

    下面小編就為大家?guī)?lái)一篇淺談C# winForm 窗體閃爍的問(wèn)題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C#使用Stack類進(jìn)行堆棧設(shè)計(jì)詳解

    C#使用Stack類進(jìn)行堆棧設(shè)計(jì)詳解

    C#中的堆棧由System.Collections.Generic命名空間中的Stack類定義,那么下面就跟隨小編一起學(xué)習(xí)一下C#如何Stack類進(jìn)行堆棧設(shè)計(jì)吧
    2024-03-03
  • C#實(shí)現(xiàn)漢字轉(zhuǎn)拼音(多音字)功能詳解

    C#實(shí)現(xiàn)漢字轉(zhuǎn)拼音(多音字)功能詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)漢字轉(zhuǎn)拼音(支持多音字)的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-02-02
  • C#獲取進(jìn)程或線程相關(guān)信息的方法

    C#獲取進(jìn)程或線程相關(guān)信息的方法

    這篇文章主要介紹了C#獲取進(jìn)程或線程相關(guān)信息的方法,涉及C#操作進(jìn)程及線程的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • Unity UI或3D場(chǎng)景實(shí)現(xiàn)跟隨手機(jī)陀螺儀的晃動(dòng)效果

    Unity UI或3D場(chǎng)景實(shí)現(xiàn)跟隨手機(jī)陀螺儀的晃動(dòng)效果

    這篇文章主要介紹了Unity UI或3D場(chǎng)景實(shí)現(xiàn)跟隨手機(jī)陀螺儀的晃動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C#路徑,文件,目錄及IO常見操作匯總

    C#路徑,文件,目錄及IO常見操作匯總

    這篇文章主要介紹了C#路徑,文件,目錄及IO常見操作,較為詳細(xì)的分析并匯總了C#關(guān)于路徑,文件,目錄及IO常見操作,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • C#實(shí)現(xiàn)獲取電腦硬件顯卡核心代號(hào)信息

    C#實(shí)現(xiàn)獲取電腦硬件顯卡核心代號(hào)信息

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)獲取電腦硬件顯卡核心代號(hào)信息,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C#中Timer定時(shí)器類的簡(jiǎn)單使用

    C#中Timer定時(shí)器類的簡(jiǎn)單使用

    定時(shí)器就是經(jīng)過(guò)固定時(shí)間,執(zhí)行固定任務(wù),本文主要介紹了C#中Timer定時(shí)器類的簡(jiǎn)單使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評(píng)論