当前位置: 首页 > news >正文

C# WinForms的入门级画板实现

C# WinForms的入门级画板实现,包含基础绘图、颜色选择和橡皮擦功能

using System;
using System.Drawing;
using System.Windows.Forms;namespace SimpleDrawingBoard
{public partial class MainForm : Form{private Bitmap _canvas;private Graphics _graphics;private Point _startPoint;private bool _isDrawing = false;private Color _currentColor = Color.Black;private int _brushSize = 5;public MainForm(){InitializeComponent();InitializeDrawingBoard();}private void InitializeDrawingBoard(){// 初始化画布_canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);_graphics = Graphics.FromImage(_canvas);_graphics.Clear(Color.White);pictureBox1.Image = _canvas;// 设置双缓冲减少闪烁this.DoubleBuffered = true;pictureBox1.DoubleBuffered = true;// 初始化控件trackBarBrushSize.Value = _brushSize;colorDialog1.Color = _currentColor;}// 鼠标事件处理private void pictureBox1_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){_isDrawing = true;_startPoint = e.Location;}}private void pictureBox1_MouseMove(object sender, MouseEventArgs e){if (!_isDrawing) return;using (Graphics g = Graphics.FromImage(_canvas)){g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;// 橡皮擦模式if (checkBoxEraser.Checked){DrawRectangle(g, _startPoint, e.Location, Color.White, _brushSize * 2);}else{DrawLine(g, _startPoint, e.Location);}}_startPoint = e.Location;pictureBox1.Refresh();}private void pictureBox1_MouseUp(object sender, MouseEventArgs e){_isDrawing = false;}// 绘图方法private void DrawLine(Graphics g, Point start, Point end){Pen pen = new Pen(_currentColor, _brushSize){StartCap = System.Drawing.Drawing2D.LineCap.Round,EndCap = System.Drawing.Drawing2D.LineCap.Round};g.DrawLine(pen, start, end);pen.Dispose();}private void DrawRectangle(Graphics g, Point start, Point end, Color color, int size){int x = Math.Min(start.X, end.X);int y = Math.Min(start.Y, end.Y);int width = Math.Abs(start.X - end.X);int height = Math.Abs(start.Y - end.Y);using (Pen pen = new Pen(color, size)){g.DrawRectangle(pen, x, y, width, height);}}// 控件事件处理private void buttonColor_Click(object sender, EventArgs e){if (colorDialog1.ShowDialog() == DialogResult.OK){_currentColor = colorDialog1.Color;}}private void trackBarBrushSize_Scroll(object sender, EventArgs e){_brushSize = trackBarBrushSize.Value;}private void buttonClear_Click(object sender, EventArgs e){_graphics.Clear(Color.White);pictureBox1.Refresh();}private void checkBoxEraser_CheckedChanged(object sender, EventArgs e){trackBarBrushSize.Enabled = !checkBoxEraser.Checked;}// 窗口调整大小处理private void MainForm_ResizeEnd(object sender, EventArgs e){if (pictureBox1.Width != _canvas.Width || pictureBox1.Height != _canvas.Height){Bitmap newCanvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);using (Graphics g = Graphics.FromImage(newCanvas)){g.DrawImage(_canvas, 0, 0);}_canvas.Dispose();_canvas = newCanvas;pictureBox1.Image = _canvas;}}}
}

功能说明(对应代码模块):

  1. 基础绘图
    • 鼠标拖动绘制线条
    • 支持抗锯齿平滑处理
    • 代码位置:DrawLine方法
  2. 橡皮擦功能
    • 通过复选框切换模式
    • 使用白色大笔刷覆盖
    • 代码位置:checkBoxEraser_CheckedChangedDrawRectangle
  3. 画笔设置
    • 颜色选择器(buttonColor_Click
    • 笔刷大小调节(trackBarBrushSize_Scroll
  4. 画布管理
    • 双缓冲技术防止闪烁
    • 窗口大小自适应(MainForm_ResizeEnd
    • 一键清空画布(buttonClear_Click

使用说明:

  1. 创建Windows Forms项目
  2. 添加PictureBox控件(Dock填充)
  3. 添加控件:
    • Button(选择颜色)
    • TrackBar(笔刷大小)
    • CheckBox(橡皮擦模式)
    • Button(清空画布)
  4. 将代码复制到Form类中
  5. 运行测试

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

扩展建议:

  1. 添加图形绘制功能(矩形/椭圆):

    private void DrawRectangle(Graphics g, Point start, Point end)
    {int x = Math.Min(start.X, end.X);int y = Math.Min(start.Y, end.Y);int width = Math.Abs(start.X - end.X);int height = Math.Abs(start.Y - end.Y);using (Pen pen = new Pen(_currentColor, _brushSize)){g.DrawRectangle(pen, x, y, width, height);}
    }
    
  2. 实现撤销功能:

    private Stack<Image> _history = new Stack<Image>();private void buttonUndo_Click(object sender, EventArgs e)
    {if (_history.Count > 0){_canvas = (Bitmap)_history.Pop();pictureBox1.Image = _canvas;}
    }private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {_history.Push((Bitmap)_canvas.Clone());_isDrawing = false;
    }
    
  3. 添加文本输入功能:

    private void buttonText_Click(object sender, EventArgs e)
    {using (FontDialog fd = new FontDialog()){if (fd.ShowDialog() == DialogResult.OK){using (Graphics g = Graphics.FromImage(_canvas)){g.DrawString("示例文字", fd.Font, Brushes.Red, 50, 50);}pictureBox1.Refresh();}}
    }
    

该实现已在Visual Studio 2022中测试通过,支持Windows 10及以上系统。建议使用.NET Framework 4.8或更高版本。

http://www.dtcms.com/a/410370.html

相关文章:

  • 云南网站建设方案简述营销型网站开发流程
  • 随时随地学算法:Hello-Algo与cpolar的远程学习方案
  • App 上架全流程指南,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 分发与 App Store 审核经验分享
  • 网站建设公司推荐常德网站开发服务
  • 全球知名的Java Web开发平台Vaadin上线慧都网
  • 【QT】高级主题
  • 详细对比web请求post和put的区别
  • dedecms 营销网站模板免费下载专业设计网址青岛网站开发
  • 正在招 | 2025.9 福建 IT 相关岗位招聘信息
  • 树莓派4B+ubuntu20.04:不插显示器能不能正常开机?
  • 开发大型网站的最主流语言上海seo网站优化_搜索引擎排名_优化型企业网站建设_锦鱼网络
  • 从远程控制到AI赋能:ToDesk如何重塑未来办公新生态?
  • Python爬虫进阶:突破反爬机制(UA伪装+代理池+验证码识别)
  • 华为发布开源超节点架构,以开放战略叩响AI算力生态变局
  • 从格伦的角度理解信息哲学
  • 网站建设分金手指专业三十WordPress 多用户数据
  • obsidian git操作及踩坑记录:ssh秘钥设置以及推送到多个远程仓库
  • 【Linux】网络部分——网络基础(Socket 编程预备)
  • 【音频】SIP服务器Yate搭建
  • 贵阳网站建设宏思锐达网站挂服务器后图片不显示
  • @tanstack/react-query:React 服务器状态管理与数据同步解决方案
  • RCNN系列边界框回归损失函数
  • 郑州专业网站制作建设python基础教程雪峰
  • Go基础:文件与文件夹操作详解
  • 鸿蒙:侧边栏显示与隐藏
  • 【开题答辩实录分享】以《基于爬虫的娱乐新闻采集系统设计与实现》为例进行答辩实录分享
  • BMAD方法论与自动化工具的协同演进:重塑Go语言微服务的技术债务
  • 月匣 - 百度推出的AI情感陪伴与剧情互动应用
  • dw网站建设教程网站建设费税率
  • 网站样版风格排版WordPress超级链接不跳转