C#實現(xiàn)簡易畫圖板的示例代碼
編程環(huán)境
VS2019、C#
畫板功能演示
實現(xiàn)簡單畫圖

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

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

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

粗細選擇功能
提供四種型號的畫筆供用戶選擇

清空畫布功能
點擊清空后提示是否清空

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

功能實現(xiàn)過程
定義公共變量
用于多個窗體之間共同使用數(shù)據(jù)
public class TempData
{
//用于多個窗體共同使用的數(shù)據(jù)
public static int size=5;
public static SolidBrush solidBrush=new SolidBrush(Color.Black);
public static Graphics p;
}
繪圖需要畫筆和畫布
創(chuàng)建畫布對象
bm = new Bitmap(panel1.Width, panel1.Height);
panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));
創(chuàng)建畫筆對象
SolidBrush solidBrush=new SolidBrush(Color.Black);
實現(xiàn)對鼠標行為的捕捉
定義一個bool的變量paint,用于指示是否開始作畫,但其值為true時開始作畫,為false時結(jié)束作畫
鼠標左鍵按下則:使paint值變?yōu)閠rue
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
paint = true;//開始畫畫
}
鼠標左鍵松開則:使paint值變?yōu)閒alse
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
paint = false;//結(jié)束畫畫
}
繪制圖形
paint為true時
e.x、e.y用來獲取鼠標的坐標,便于在對應的地方進行繪制
用radioButton1.Checked(畫筆)進一步判斷是否選中畫筆,選中畫筆則在鼠標移動的位置畫上相應的線條
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(橡皮)進一步判斷是否選中橡皮,選中橡皮則在鼠標移動的位置擦去相應的線條
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));
}

用兩個單選按鈕控件radioButton(只可以選擇其中一個)來分別表示畫筆和橡皮
paint為false時
不響應畫畫與擦除操作
鼠標按下左鍵且移動時:
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
TempData.p = Graphics.FromImage(bm);//用bm來創(chuà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));
}
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));
}
}
畫筆粗細的選擇

使用單選按鈕控件實現(xiàn)用戶畫筆粗細的選擇
首先定義了一個類,里面包含公共的變量size,size即為畫筆的粗細
選擇不同的radioButton則對size賦不同的值,用if_else_語句實現(xiàn)
private void button1_Click(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
MessageBox.Show("你選擇了小號畫筆", "信息提示", MessageBoxButtons.OK);
TempData.size = 5;
}
else if (radioButton2.Checked)
{
MessageBox.Show("你選擇了中號畫筆", "信息提示", MessageBoxButtons.OK);
TempData.size = 10;
}
else if (radioButton3.Checked)
{
MessageBox.Show("你選擇了大號畫筆", "信息提示", MessageBoxButtons.OK);
TempData.size = 15;
}
else
{
MessageBox.Show("你選擇了刷子", "信息提示", MessageBoxButtons.OK);
TempData.size = 20;
}
this.Close();//關閉當前窗口
}
MessageBox.Show(“提示內(nèi)容”, “提示框名稱”, 按鍵模式);用于展示提示內(nèi)容
this.Close();用于關閉當前窗口
畫筆顏色的選擇

對顏色對話框的調(diào)用
用語句TempData.solidBrush = new SolidBrush(colorDialog1.Color);將選擇的顏色設置到畫筆中
private void 顏色ToolStripMenuItem_Click(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
TempData.solidBrush = new SolidBrush(colorDialog1.Color);
}
打開文件
對打開文件對話框的調(diào)用
可打開jpg格式的文件,由打開文件對話框的返回值確定是否執(zhí)行將jpg設置為畫板的背景的功能
private void 打開ToolStripMenuItem_Click(object sender, EventArgs e)
{
bool open = false;
openFileDialog1.FileName = "";
openFileDialog1.Filter = "JPG File(*.jpg)|*.JPG";
DialogResult r = openFileDialog1.ShowDialog();//打開文件對話框并返回值
if (r.ToString() == "OK") open = true;//ToString()用于將值轉(zhuǎn)化為其等價的字符串形式
if (open)
{
panel1.BackgroundImage = Image.FromFile(openFileDialog1.FileName);//設置畫布的背景圖片
}
}
保存文件
對保存文件對話框的調(diào)用
用語句bm.Save(saveFileDialog1.FileName);將畫布bm上的內(nèi)容存在指定位置存為jpg文件,saveFileDialog1.FileName為文件的名稱
private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
{
saveFileDialog1.Filter = "JPG File(*.jpg)|*.JPG";//設置保存的格式為jpg
if(saveFileDialog1.ShowDialog()==System.Windows.Forms.DialogResult.OK)
{
bm.Save(saveFileDialog1.FileName);//直接將bm保存為jpg格式
}
}
清空畫布
定義一個bool類型的變量clear用于指示是否將內(nèi)容清空,當clear值為true時清空畫布,否則不清空
為了防止用戶操作失誤使得內(nèi)容被清空,加上下面的代碼,當用戶按下確定鍵時才將clear改為true,即清空畫布
DialogResult r = MessageBox.Show("確定將清空畫布內(nèi)容?", "提示", MessageBoxButtons.OKCancel);
if (r.ToString() == "OK") clear = true;
清空畫布即用一張白色的畫布覆蓋之前全部內(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用于指示對話框中的返回值
//后者返回值為OK、Cancel、Yes、No是由具體規(guī)定而定的
if (r.ToString() == "OK") clear = true;//ToString()用于將值轉(zhuǎn)化為其等價的字符串形式
if (clear)
{
TempData.p.Clear(Color.White);
panel1.CreateGraphics().DrawImage(bm, new Point(0, 0));//重新繪制畫板
clear = false;
}
}
到此這篇關于C#實現(xiàn)簡易畫圖板的示例代碼的文章就介紹到這了,更多相關C# 畫圖板內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#調(diào)用百度API實現(xiàn)活體檢測的方法
這篇文章主要給大家介紹了關于C#調(diào)用百度API實現(xiàn)活體檢測的方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09
C#實現(xiàn)自定義windows系統(tǒng)日志的方法
這篇文章主要介紹了C#實現(xiàn)自定義windows系統(tǒng)日志的方法,涉及C#針對windows系統(tǒng)日志的創(chuàng)建、讀寫及刪除技巧,非常具有實用價值,需要的朋友可以參考下2015-08-08
C#實現(xiàn)漢字轉(zhuǎn)拼音(多音字)功能詳解
這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)漢字轉(zhuǎn)拼音(支持多音字)的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2023-02-02
Unity UI或3D場景實現(xiàn)跟隨手機陀螺儀的晃動效果
這篇文章主要介紹了Unity UI或3D場景實現(xiàn)跟隨手機陀螺儀的晃動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11

