news 2026/4/3 2:14:29

C# 实现画板源码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C# 实现画板源码

简单易用的C#画板程序,适合初学者学习。这个画板包含基本的绘图功能,如画笔、橡皮擦、形状绘制等。

1. 主窗体设计 (Form1.Designer.cs)

partialclassForm1{privateSystem.ComponentModel.IContainercomponents=null;privateSystem.Windows.Forms.PanelpanelToolBox;privateSystem.Windows.Forms.PanelpanelCanvas;privateSystem.Windows.Forms.ButtonbtnPencil;privateSystem.Windows.Forms.ButtonbtnLine;privateSystem.Windows.Forms.ButtonbtnRectangle;privateSystem.Windows.Forms.ButtonbtnEllipse;privateSystem.Windows.Forms.ButtonbtnEraser;privateSystem.Windows.Forms.ButtonbtnClear;privateSystem.Windows.Forms.ButtonbtnColor;privateSystem.Windows.Forms.NumericUpDownnumSize;privateSystem.Windows.Forms.PictureBoxpictureBoxCanvas;privateSystem.Windows.Forms.ColorDialogcolorDialog;privateSystem.Windows.Forms.LabellblTool;privateSystem.Windows.Forms.LabellblSize;privateSystem.Windows.Forms.ButtonbtnSave;privateSystem.Windows.Forms.ButtonbtnOpen;privateSystem.Windows.Forms.SaveFileDialogsaveFileDialog;privateSystem.Windows.Forms.OpenFileDialogopenFileDialog;protectedoverridevoidDispose(booldisposing){if(disposing&&(components!=null)){components.Dispose();}base.Dispose(disposing);}privatevoidInitializeComponent(){this.components=newSystem.ComponentModel.Container();this.panelToolBox=newSystem.Windows.Forms.Panel();this.btnSave=newSystem.Windows.Forms.Button();this.btnOpen=newSystem.Windows.Forms.Button();this.lblSize=newSystem.Windows.Forms.Label();this.lblTool=newSystem.Windows.Forms.Label();this.numSize=newSystem.Windows.Forms.NumericUpDown();this.btnColor=newSystem.Windows.Forms.Button();this.btnClear=newSystem.Windows.Forms.Button();this.btnEraser=newSystem.Windows.Forms.Button();this.btnEllipse=newSystem.Windows.Forms.Button();this.btnRectangle=newSystem.Windows.Forms.Button();this.btnLine=newSystem.Windows.Forms.Button();this.btnPencil=newSystem.Windows.Forms.Button();this.panelCanvas=newSystem.Windows.Forms.Panel();this.pictureBoxCanvas=newSystem.Windows.Forms.PictureBox();this.colorDialog=newSystem.Windows.Forms.ColorDialog();this.saveFileDialog=newSystem.Windows.Forms.SaveFileDialog();this.openFileDialog=newSystem.Windows.Forms.OpenFileDialog();this.panelToolBox.SuspendLayout();((System.ComponentModel.ISupportInitialize)(this.numSize)).BeginInit();this.panelCanvas.SuspendLayout();((System.ComponentModel.ISupportInitialize)(this.pictureBoxCanvas)).BeginInit();this.SuspendLayout();// panelToolBoxthis.panelToolBox.BackColor=System.Drawing.SystemColors.ControlDark;this.panelToolBox.Controls.Add(this.btnSave);this.panelToolBox.Controls.Add(this.btnOpen);this.panelToolBox.Controls.Add(this.lblSize);this.panelToolBox.Controls.Add(this.lblTool);this.panelToolBox.Controls.Add(this.numSize);this.panelToolBox.Controls.Add(this.btnColor);this.panelToolBox.Controls.Add(this.btnClear);this.panelToolBox.Controls.Add(this.btnEraser);this.panelToolBox.Controls.Add(this.btnEllipse);this.panelToolBox.Controls.Add(this.btnRectangle);this.panelToolBox.Controls.Add(this.btnLine);this.panelToolBox.Controls.Add(this.btnPencil);this.panelToolBox.Dock=System.Windows.Forms.DockStyle.Left;this.panelToolBox.Location=newSystem.Drawing.Point(0,0);this.panelToolBox.Name="panelToolBox";this.panelToolBox.Size=newSystem.Drawing.Size(120,600);this.panelToolBox.TabIndex=0;// btnSavethis.btnSave.Location=newSystem.Drawing.Point(10,350);this.btnSave.Name="btnSave";this.btnSave.Size=newSystem.Drawing.Size(100,30);this.btnSave.TabIndex=11;this.btnSave.Text="保存";this.btnSave.UseVisualStyleBackColor=true;this.btnSave.Click+=newSystem.EventHandler(this.btnSave_Click);// btnOpenthis.btnOpen.Location=newSystem.Drawing.Point(10,310);this.btnOpen.Name="btnOpen";this.btnOpen.Size=newSystem.Drawing.Size(100,30);this.btnOpen.TabIndex=10;this.btnOpen.Text="打开";this.btnOpen.UseVisualStyleBackColor=true;this.btnOpen.Click+=newSystem.EventHandler(this.btnOpen_Click);// lblSizethis.lblSize.AutoSize=true;this.lblSize.Location=newSystem.Drawing.Point(10,250);this.lblSize.Name="lblSize";this.lblSize.Size=newSystem.Drawing.Size(41,12);this.lblSize.TabIndex=9;this.lblSize.Text="粗细:";// lblToolthis.lblTool.AutoSize=true;this.lblTool.Font=newSystem.Drawing.Font("宋体",9F,System.Drawing.FontStyle.Bold);this.lblTool.Location=newSystem.Drawing.Point(10,10);this.lblTool.Name="lblTool";this.lblTool.Size=newSystem.Drawing.Size(57,12);this.lblTool.TabIndex=8;this.lblTool.Text="绘图工具";// numSizethis.numSize.Location=newSystem.Drawing.Point(10,270);this.numSize.Minimum=newdecimal(newint[]{1,0,0,0});this.numSize.Name="numSize";this.numSize.Size=newSystem.Drawing.Size(100,21);this.numSize.TabIndex=7;this.numSize.Value=newdecimal(newint[]{3,0,0,0});// btnColorthis.btnColor.BackColor=System.Drawing.Color.Black;this.btnColor.Location=newSystem.Drawing.Point(10,220);this.btnColor.Name="btnColor";this.btnColor.Size=newSystem.Drawing.Size(100,30);this.btnColor.TabIndex=6;this.btnColor.UseVisualStyleBackColor=false;this.btnColor.Click+=newSystem.EventHandler(this.btnColor_Click);// btnClearthis.btnClear.Location=newSystem.Drawing.Point(10,180);this.btnClear.Name="btnClear";this.btnClear.Size=newSystem.Drawing.Size(100,30);this.btnClear.TabIndex=5;this.btnClear.Text="清空画板";this.btnClear.UseVisualStyleBackColor=true;this.btnClear.Click+=newSystem.EventHandler(this.btnClear_Click);// btnEraserthis.btnEraser.Location=newSystem.Drawing.Point(10,150);this.btnEraser.Name="btnEraser";this.btnEraser.Size=newSystem.Drawing.Size(100,30);this.btnEraser.TabIndex=4;this.btnEraser.Text="橡皮擦";this.btnEraser.UseVisualStyleBackColor=true;this.btnEraser.Click+=newSystem.EventHandler(this.btnEraser_Click);// btnEllipsethis.btnEllipse.Location=newSystem.Drawing.Point(10,120);this.btnEllipse.Name="btnEllipse";this.btnEllipse.Size=newSystem.Drawing.Size(100,30);this.btnEllipse.TabIndex=3;this.btnEllipse.Text="椭圆";this.btnEllipse.UseVisualStyleBackColor=true;this.btnEllipse.Click+=newSystem.EventHandler(this.btnEllipse_Click);// btnRectanglethis.btnRectangle.Location=newSystem.Drawing.Point(10,90);this.btnRectangle.Name="btnRectangle";this.btnRectangle.Size=newSystem.Drawing.Size(100,30);this.btnRectangle.TabIndex=2;this.btnRectangle.Text="矩形";this.btnRectangle.UseVisualStyleBackColor=true;this.btnRectangle.Click+=newSystem.EventHandler(this.btnRectangle_Click);// btnLinethis.btnLine.Location=newSystem.Drawing.Point(10,60);this.btnLine.Name="btnLine";this.btnLine.Size=newSystem.Drawing.Size(100,30);this.btnLine.TabIndex=1;this.btnLine.Text="直线";this.btnLine.UseVisualStyleBackColor=true;this.btnLine.Click+=newSystem.EventHandler(this.btnLine_Click);// btnPencilthis.btnPencil.Location=newSystem.Drawing.Point(10,30);this.btnPencil.Name="btnPencil";this.btnPencil.Size=newSystem.Drawing.Size(100,30);this.btnPencil.TabIndex=0;this.btnPencil.Text="铅笔";this.btnPencil.UseVisualStyleBackColor=true;this.btnPencil.Click+=newSystem.EventHandler(this.btnPencil_Click);// panelCanvasthis.panelCanvas.BackColor=System.Drawing.SystemColors.AppWorkspace;this.panelCanvas.Controls.Add(this.pictureBoxCanvas);this.panelCanvas.Dock=System.Windows.Forms.DockStyle.Fill;this.panelCanvas.Location=newSystem.Drawing.Point(120,0);this.panelCanvas.Name="panelCanvas";this.panelCanvas.Size=newSystem.Drawing.Size(680,600);this.panelCanvas.TabIndex=1;// pictureBoxCanvasthis.pictureBoxCanvas.BackColor=System.Drawing.Color.White;this.pictureBoxCanvas.Dock=System.Windows.Forms.DockStyle.Fill;this.pictureBoxCanvas.Location=newSystem.Drawing.Point(0,0);this.pictureBoxCanvas.Name="pictureBoxCanvas";this.pictureBoxCanvas.Size=newSystem.Drawing.Size(680,600);this.pictureBoxCanvas.TabIndex=0;this.pictureBoxCanvas.TabStop=false;this.pictureBoxCanvas.MouseDown+=newSystem.Windows.Forms.MouseEventHandler(this.pictureBoxCanvas_MouseDown);this.pictureBoxCanvas.MouseMove+=newSystem.Windows.Forms.MouseEventHandler(this.pictureBoxCanvas_MouseMove);this.pictureBoxCanvas.MouseUp+=newSystem.Windows.Forms.MouseEventHandler(this.pictureBoxCanvas_MouseUp);// saveFileDialogthis.saveFileDialog.Filter="PNG 图片|*.png|JPEG 图片|*.jpg|BMP 图片|*.bmp";// openFileDialogthis.openFileDialog.Filter="图片文件|*.png;*.jpg;*.bmp";// Form1this.AutoScaleDimensions=newSystem.Drawing.SizeF(6F,12F);this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;this.ClientSize=newSystem.Drawing.Size(800,600);this.Controls.Add(this.panelCanvas);this.Controls.Add(this.panelToolBox);this.Name="Form1";this.Text="简易画板";this.Load+=newSystem.EventHandler(this.Form1_Load);this.panelToolBox.ResumeLayout(false);this.panelToolBox.PerformLayout();((System.ComponentModel.ISupportInitialize)(this.numSize)).EndInit();this.panelCanvas.ResumeLayout(false);((System.ComponentModel.ISupportInitialize)(this.pictureBoxCanvas)).EndInit();this.ResumeLayout(false);}}

2. 主窗体代码 (Form1.cs)

usingSystem;usingSystem.Drawing;usingSystem.Drawing.Drawing2D;usingSystem.IO;usingSystem.Windows.Forms;namespaceSimplePaint{publicpartialclassForm1:Form{// 绘图工具枚举privateenumDrawingTool{Pencil,Line,Rectangle,Ellipse,Eraser}// 变量声明privateDrawingToolcurrentTool=DrawingTool.Pencil;privateBitmapcanvasBitmap;privateGraphicscanvasGraphics;privatePencurrentPen;privatePeneraserPen;privatePointstartPoint;privatePointendPoint;privateboolisDrawing=false;privateBitmaptempBitmap;privateGraphicstempGraphics;publicForm1(){InitializeComponent();InitializeDrawingTools();}privatevoidInitializeDrawingTools(){// 初始化画笔currentPen=newPen(Color.Black,(float)numSize.Value);currentPen.StartCap=LineCap.Round;currentPen.EndCap=LineCap.Round;// 初始化橡皮擦(白色画笔)eraserPen=newPen(Color.White,(float)numSize.Value);eraserPen.StartCap=LineCap.Round;eraserPen.EndCap=LineCap.Round;// 初始化画布InitializeCanvas();}privatevoidInitializeCanvas(){// 创建画布位图canvasBitmap=newBitmap(pictureBoxCanvas.Width,pictureBoxCanvas.Height);canvasGraphics=Graphics.FromImage(canvasBitmap);canvasGraphics.SmoothingMode=SmoothingMode.AntiAlias;canvasGraphics.Clear(Color.White);// 设置PictureBox的图像pictureBoxCanvas.Image=canvasBitmap;}privatevoidForm1_Load(objectsender,EventArgse){// 窗体加载时的初始化UpdateToolSelection();}privatevoidUpdateToolSelection(){// 更新工具按钮的选中状态btnPencil.BackColor=(currentTool==DrawingTool.Pencil)?SystemColors.ControlLight:SystemColors.Control;btnLine.BackColor=(currentTool==DrawingTool.Line)?SystemColors.ControlLight:SystemColors.Control;btnRectangle.BackColor=(currentTool==DrawingTool.Rectangle)?SystemColors.ControlLight:SystemColors.Control;btnEllipse.BackColor=(currentTool==DrawingTool.Ellipse)?SystemColors.ControlLight:SystemColors.Control;btnEraser.BackColor=(currentTool==DrawingTool.Eraser)?SystemColors.ControlLight:SystemColors.Control;}// 工具按钮点击事件privatevoidbtnPencil_Click(objectsender,EventArgse){currentTool=DrawingTool.Pencil;UpdateToolSelection();}privatevoidbtnLine_Click(objectsender,EventArgse){currentTool=DrawingTool.Line;UpdateToolSelection();}privatevoidbtnRectangle_Click(objectsender,EventArgse){currentTool=DrawingTool.Rectangle;UpdateToolSelection();}privatevoidbtnEllipse_Click(objectsender,EventArgse){currentTool=DrawingTool.Ellipse;UpdateToolSelection();}privatevoidbtnEraser_Click(objectsender,EventArgse){currentTool=DrawingTool.Eraser;UpdateToolSelection();}privatevoidbtnColor_Click(objectsender,EventArgse){// 颜色选择对话框if(colorDialog.ShowDialog()==DialogResult.OK){currentPen.Color=colorDialog.Color;btnColor.BackColor=colorDialog.Color;}}privatevoidbtnClear_Click(objectsender,EventArgse){// 清空画布if(MessageBox.Show("确定要清空画板吗?","确认",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes){canvasGraphics.Clear(Color.White);pictureBoxCanvas.Invalidate();}}privatevoidbtnSave_Click(objectsender,EventArgse){// 保存图片if(saveFileDialog.ShowDialog()==DialogResult.OK){try{stringextension=Path.GetExtension(saveFileDialog.FileName).ToLower();System.Drawing.Imaging.ImageFormatformat=System.Drawing.Imaging.ImageFormat.Png;switch(extension){case".jpg":case".jpeg":format=System.Drawing.Imaging.ImageFormat.Jpeg;break;case".bmp":format=System.Drawing.Imaging.ImageFormat.Bmp;break;}canvasBitmap.Save(saveFileDialog.FileName,format);MessageBox.Show("图片保存成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);}catch(Exceptionex){MessageBox.Show("保存失败: "+ex.Message,"错误",MessageBoxButtons.OK,MessageBoxIcon.Error);}}}privatevoidbtnOpen_Click(objectsender,EventArgse){// 打开图片if(openFileDialog.ShowDialog()==DialogResult.OK){try{BitmapopenedImage=newBitmap(openFileDialog.FileName);canvasGraphics.DrawImage(openedImage,0,0,pictureBoxCanvas.Width,pictureBoxCanvas.Height);pictureBoxCanvas.Invalidate();}catch(Exceptionex){MessageBox.Show("打开图片失败: "+ex.Message,"错误",MessageBoxButtons.OK,MessageBoxIcon.Error);}}}// 鼠标事件处理privatevoidpictureBoxCanvas_MouseDown(objectsender,MouseEventArgse){if(e.Button==MouseButtons.Left){isDrawing=true;startPoint=e.Location;// 对于非铅笔工具,创建临时画布用于预览if(currentTool!=DrawingTool.Pencil&&currentTool!=DrawingTool.Eraser){tempBitmap=newBitmap(canvasBitmap);tempGraphics=Graphics.FromImage(tempBitmap);tempGraphics.SmoothingMode=SmoothingMode.AntiAlias;}}}privatevoidpictureBoxCanvas_MouseMove(objectsender,MouseEventArgse){if(isDrawing){endPoint=e.Location;switch(currentTool){caseDrawingTool.Pencil:// 铅笔工具 - 直接绘制canvasGraphics.DrawLine(currentPen,startPoint,endPoint);startPoint=endPoint;pictureBoxCanvas.Invalidate();break;caseDrawingTool.Eraser:// 橡皮擦工具 - 直接绘制canvasGraphics.DrawLine(eraserPen,startPoint,endPoint);startPoint=endPoint;pictureBoxCanvas.Invalidate();break;caseDrawingTool.Line:caseDrawingTool.Rectangle:caseDrawingTool.Ellipse:// 其他工具 - 在临时画布上预览if(tempBitmap!=null){// 恢复原始图像tempGraphics.DrawImage(canvasBitmap,0,0);// 绘制预览图形DrawPreview(tempGraphics);pictureBoxCanvas.Image=tempBitmap;}break;}}}privatevoidpictureBoxCanvas_MouseUp(objectsender,MouseEventArgse){if(isDrawing&&e.Button==MouseButtons.Left){isDrawing=false;endPoint=e.Location;// 在最终画布上绘制图形switch(currentTool){caseDrawingTool.Line:caseDrawingTool.Rectangle:caseDrawingTool.Ellipse:DrawPreview(canvasGraphics);pictureBoxCanvas.Image=canvasBitmap;// 释放临时资源if(tempGraphics!=null){tempGraphics.Dispose();tempBitmap.Dispose();tempGraphics=null;tempBitmap=null;}break;}pictureBoxCanvas.Invalidate();}}privatevoidDrawPreview(Graphicsg){// 计算矩形区域intx=Math.Min(startPoint.X,endPoint.X);inty=Math.Min(startPoint.Y,endPoint.Y);intwidth=Math.Abs(endPoint.X-startPoint.X);intheight=Math.Abs(endPoint.Y-startPoint.Y);// 根据当前工具绘制图形switch(currentTool){caseDrawingTool.Line:g.DrawLine(currentPen,startPoint,endPoint);break;caseDrawingTool.Rectangle:g.DrawRectangle(currentPen,x,y,width,height);break;caseDrawingTool.Ellipse:g.DrawEllipse(currentPen,x,y,width,height);break;}}// 画笔粗细改变事件privatevoidnumSize_ValueChanged(objectsender,EventArgse){currentPen.Width=(float)numSize.Value;eraserPen.Width=(float)numSize.Value;}// 窗体大小改变时调整画布protectedoverridevoidOnResize(EventArgse){base.OnResize(e);if(canvasBitmap!=null&&pictureBoxCanvas.Width>0&&pictureBoxCanvas.Height>0){// 创建新的画布BitmapnewBitmap=newBitmap(pictureBoxCanvas.Width,pictureBoxCanvas.Height);GraphicsnewGraphics=Graphics.FromImage(newBitmap);newGraphics.SmoothingMode=SmoothingMode.AntiAlias;newGraphics.Clear(Color.White);// 将旧画布内容绘制到新画布上newGraphics.DrawImage(canvasBitmap,0,0);// 更新引用canvasGraphics.Dispose();canvasBitmap.Dispose();canvasBitmap=newBitmap;canvasGraphics=newGraphics;pictureBoxCanvas.Image=canvasBitmap;}}// 资源释放protectedoverridevoidOnFormClosed(FormClosedEventArgse){base.OnFormClosed(e);if(canvasGraphics!=null)canvasGraphics.Dispose();if(canvasBitmap!=null)canvasBitmap.Dispose();if(currentPen!=null)currentPen.Dispose();if(eraserPen!=null)eraserPen.Dispose();if(tempGraphics!=null)tempGraphics.Dispose();if(tempBitmap!=null)tempBitmap.Dispose();}}}

3. 程序入口点 (Program.cs)

usingSystem;usingSystem.Windows.Forms;namespaceSimplePaint{internalstaticclassProgram{/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(newForm1());}}}

4. 项目配置文件 (SimplePaint.csproj)

<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>WinExe</OutputType><TargetFramework>net6.0-windows</TargetFramework><UseWindowsForms>true</UseWindowsForms><ApplicationIcon>paint.ico</ApplicationIcon></PropertyGroup><ItemGroup><PackageReferenceInclude="System.Drawing.Common"Version="6.0.0"/></ItemGroup></Project>

5. 扩展功能类 - 添加文本工具

// TextToolForm.cs - 文本输入窗体usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;namespaceSimplePaint{publicpartialclassTextToolForm:Form{publicstringEnteredText{get;privateset;}publicFontSelectedFont{get;privateset;}publicColorSelectedColor{get;privateset;}publicTextToolForm(){InitializeComponent();SelectedFont=newFont("Arial",12);SelectedColor=Color.Black;}privatevoidInitializeComponent(){this.txtText=newTextBox();this.btnFont=newButton();this.btnColor=newButton();this.btnOK=newButton();this.btnCancel=newButton();this.fontDialog=newFontDialog();this.colorDialog=newColorDialog();this.SuspendLayout();// txtTextthis.txtText.Location=newPoint(10,10);this.txtText.Multiline=true;this.txtText.Size=newSize(300,100);this.txtText.TabIndex=0;// btnFontthis.btnFont.Location=newPoint(10,120);this.btnFont.Size=newSize(100,30);this.btnFont.TabIndex=1;this.btnFont.Text="选择字体";this.btnFont.Click+=newEventHandler(this.btnFont_Click);// btnColorthis.btnColor.Location=newPoint(120,120);this.btnColor.Size=newSize(100,30);this.btnColor.TabIndex=2;this.btnColor.Text="选择颜色";this.btnColor.Click+=newEventHandler(this.btnColor_Click);// btnOKthis.btnOK.Location=newPoint(150,160);this.btnOK.Size=newSize(75,30);this.btnOK.TabIndex=3;this.btnOK.Text="确定";this.btnOK.Click+=newEventHandler(this.btnOK_Click);// btnCancelthis.btnCancel.Location=newPoint(235,160);this.btnCancel.Size=newSize(75,30);this.btnCancel.TabIndex=4;this.btnCancel.Text="取消";this.btnCancel.Click+=newEventHandler(this.btnCancel_Click);// TextToolFormthis.ClientSize=newSize(320,200);this.Controls.AddRange(newControl[]{this.txtText,this.btnFont,this.btnColor,this.btnOK,this.btnCancel});this.FormBorderStyle=FormBorderStyle.FixedDialog;this.MaximizeBox=false;this.MinimizeBox=false;this.StartPosition=FormStartPosition.CenterParent;this.Text="添加文本";this.ResumeLayout(false);}privatevoidbtnFont_Click(objectsender,EventArgse){if(fontDialog.ShowDialog()==DialogResult.OK){SelectedFont=fontDialog.Font;}}privatevoidbtnColor_Click(objectsender,EventArgse){if(colorDialog.ShowDialog()==DialogResult.OK){SelectedColor=colorDialog.Color;}}privatevoidbtnOK_Click(objectsender,EventArgse){EnteredText=txtText.Text;DialogResult=DialogResult.OK;Close();}privatevoidbtnCancel_Click(objectsender,EventArgse){DialogResult=DialogResult.Cancel;Close();}}}

参考项目 C#入门级画板示例源码(画图板)www.3dddown.com/csa/62386.html

说明

功能特性:

  1. 基本绘图工具:铅笔、直线、矩形、椭圆、橡皮擦
  2. 颜色选择:可自定义画笔颜色
  3. 粗细调整:可调整画笔和橡皮擦的粗细
  4. 文件操作:支持打开、保存图片(PNG、JPEG、BMP格式)
  5. 清空画板:一键清空所有绘图内容
  6. 实时预览:绘制形状时有实时预览效果

编译和运行:

  1. 使用Visual Studio创建新的Windows Forms项目
  2. 将上述代码文件添加到项目中
  3. 编译并运行程序

学习要点:

  • Windows Forms基础控件使用
  • GDI+绘图技术
  • 鼠标事件处理
  • 图形图像处理
  • 文件对话框操作
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 10:11:26

图解CUDA和cuDNN:小白也能懂的GPU加速原理

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 制作一个交互式教程&#xff1a;1) 用「厨房做菜」比喻CUDA&#xff08;厨房设备&#xff09;和cuDNN&#xff08;预制菜配方&#xff09;的关系 2) 可拖动的GPU架构图标注SM、显存…

作者头像 李华
网站建设 2026/4/1 12:23:39

基于FPGA的分数阶自适应滤波器(FIR/IIR等)2023年H题

基于FPGA的自适应滤波器FIR/IIR滤波器LMS/NLMS/RLS算法/FxLMS/分数阶 2023年H题 本设计是在FPGA开发板上实现一个自适应滤波器&#xff0c;只需要输入于扰信号和期望信号(混合信号)即可得到滤波输出&#xff0c;使用非常简单。 可以根据具体需要对滤波器进行定制&#xff0c;其…

作者头像 李华
网站建设 2026/3/29 21:00:53

企业级Nacos配置中心认证最佳实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Nacos配置中心认证配置检查工具&#xff0c;包含以下功能&#xff1a;1. 验证Nacos服务端认证配置 2. 检查客户端环境变量设置 3. 提供base64字符串生成器 4. 输出详细的错…

作者头像 李华
网站建设 2026/4/1 19:37:07

switch vs if-else:百万次循环的性能对决

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个JavaScript性能测试套件&#xff0c;包含&#xff1a;1)使用switch case和if-else实现相同逻辑的两种版本&#xff1b;2)用console.time进行百万次循环测试&#xff1b;3)输…

作者头像 李华
网站建设 2026/3/14 17:50:11

1小时搞定!用AI快速验证小说App创意原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速生成一个小说App的概念验证原型&#xff0c;包含&#xff1a;1.3个核心界面(首页、书库、阅读页) 2.基本交互效果 3.模拟数据展示 4.简单的用户流 5.可点击原型。使用Flutter框…

作者头像 李华
网站建设 2026/3/28 21:17:06

BabylonJS开发:从入门到实战​

​目录 第一章&#xff1a;启航&#xff01;三维世界的入场券 1.1 WebGL与BabylonJS&#xff1a;你的浏览器里藏着一个宇宙 3D图形学极简史&#xff1a;从三角形到元宇宙 BabylonJS的“超能力清单”&#xff1a;为什么选它&#xff1f; 环境搭建&#xff1a;Node.js、TypeS…

作者头像 李华