您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用C#怎么實(shí)現(xiàn)一個(gè)簡(jiǎn)易畫圖板,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
用于多個(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);
定義一個(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用來獲取鼠標(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è))來分別表示畫筆和橡皮
paint為false時(shí)
不響應(yīng)畫畫與擦除操作
鼠標(biāo)按下左鍵且移動(dòng)時(shí):
private void panel1_MouseMove(object sender, MouseEventArgs e) { TempData.p = Graphics.FromImage(bm);//用bm來創(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_語句實(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)用
用語句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)用
用語句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; } }
上述內(nèi)容就是使用C#怎么實(shí)現(xiàn)一個(gè)簡(jiǎn)易畫圖板,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。