我的画板

先看实现图

实现过程

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Imaging;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. //**********************金燕电子****************************************
  12. namespace huaban
  13. {
  14. public partial class Form1 : Form
  15. {
  16. public Form1()
  17. {
  18. InitializeComponent();
  19. toolStrip1.Enabled = false;
  20. foreColor = Color.Black ;
  21. backColor = Color.White ;
  22. }
  23. Color backColor = new Color();
  24. private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
  25. {
  26. Graphics g = this.CreateGraphics();
  27. g.Clear(backColor);
  28. toolStrip1.Enabled = true;
  29. //创建一个Bitmap
  30. theImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
  31. editFileName = "新建文件";
  32. //修改窗口标题
  33. this.Text = "MyDraw\t" + editFileName;
  34. ig = Graphics.FromImage(theImage);
  35. ig.Clear(backColor);
  36. }
  37. string editFileName = "";
  38. private Image theImage;
  39. public Graphics ig { get; private set; }
  40.  
  41. private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
  42. {
  43. openFileDialog1.Multiselect = false;
  44. if (openFileDialog1.ShowDialog() == DialogResult.OK)
  45. {
  46. //修改窗口标题
  47. this.Text = "MyDraw\t" + openFileDialog1.FileName;
  48. editFileName = openFileDialog1.FileName;
  49. theImage = Image.FromFile(openFileDialog1.FileName);
  50. Graphics g = this.CreateGraphics();
  51. g.DrawImage(theImage, this.ClientRectangle);
  52. ig = Graphics.FromImage(theImage);
  53. ig.DrawImage(theImage, this.ClientRectangle);
  54. //ToolBar可以使用了
  55. toolStrip1.Enabled = true;
  56. }
  57. }
  58.  
  59. private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
  60. {
  61. saveFileDialog1.Filter = "图像(*.bmp)|*.bmp";
  62. saveFileDialog1.FileName = editFileName;
  63. if (saveFileDialog1.ShowDialog() == DialogResult.OK)
  64. {
  65. theImage.Save(saveFileDialog1.FileName, ImageFormat.Bmp);
  66. this.Text = "MyDraw\t" + saveFileDialog1.FileName;
  67. editFileName = saveFileDialog1.FileName;
  68. }
  69. }
  70.  
  71. private void Form1_Paint(object sender, PaintEventArgs e)
  72. {
  73. //将Image中保存的图像,绘制出来
  74. Graphics g = this.CreateGraphics();
  75. if (theImage != null)
  76. {
  77. g.Clear(Color.White);
  78. g.DrawImage(theImage, this.ClientRectangle);
  79. }
  80. }
  81. Color foreColor = new Color();
  82. private void Form1_MouseDown(object sender, MouseEventArgs e)
  83. {
  84.  
  85. if (e.Button == MouseButtons.Left)
  86. {
  87. //如果选择文字输入,则打开strInput窗体
  88. if (drawTool == (int)drawTools.String)
  89. {
  90. Frm_Text inputBox = new Frm_Text();
  91. inputBox.StartPosition = FormStartPosition.CenterParent;
  92. if (inputBox.ShowDialog() == DialogResult.OK)
  93. {
  94. Graphics g = this.CreateGraphics();
  95. Font theFont = this.Font;
  96. g.DrawString(inputBox.textBox1.Text, theFont, new SolidBrush(foreColor), e.X, e.Y);
  97. ig.DrawString(inputBox.textBox1.Text, theFont, new SolidBrush(foreColor), e.X, e.Y);
  98. }
  99. }
  100. //如果开始绘制,则开始记录鼠标位置
  101. else if ((isDrawing = !isDrawing) == true)
  102. {
  103. startPoint = new Point(e.X, e.Y);
  104. oldPoint = new Point(e.X, e.Y);
  105. }
  106. }
  107. }
  108. int drawTool = 0;
  109. enum drawTools
  110. {
  111. None = 0,
  112. Pen = 1,
  113. Line = 2,
  114. Ellipse = 3,
  115. Rectangle = 4,
  116. String = 5,
  117. Rubber =6
  118. }
  119. Point oldPoint = new Point();
  120. Point startPoint = new Point();
  121. private void Form1_MouseMove(object sender, MouseEventArgs e)
  122. {
  123. Graphics g;
  124. g = this.CreateGraphics();
  125.  
  126. if (isDrawing)
  127. {
  128. switch (drawTool)
  129. {
  130. case (int)drawTools.None:
  131. break;
  132. case (int)drawTools.Pen:
  133. //从上一个点到当前点绘制线段
  134. g.DrawLine(new Pen(foreColor, 1), oldPoint, new Point(e.X, e.Y));
  135. ig.DrawLine(new Pen(foreColor, 1), oldPoint, new Point(e.X, e.Y));
  136. oldPoint.X = e.X;
  137. oldPoint.Y = e.Y;
  138. break;
  139. case (int)drawTools.Line:
  140. //首先恢复此次操作之前的图像,然后再添加Line
  141. this.Frm_Main_Paint(this, new PaintEventArgs(this.CreateGraphics(), this.ClientRectangle));
  142. g.DrawLine(new Pen(foreColor, 1), startPoint, new Point(e.X, e.Y));
  143. break;
  144. case (int)drawTools.Ellipse:
  145. //首先恢复此次操作之前的图像,然后再添加Ellipse
  146. this.Frm_Main_Paint(this, new PaintEventArgs(this.CreateGraphics(), this.ClientRectangle));
  147. g.DrawEllipse(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
  148. break;
  149. case (int)drawTools.Rectangle:
  150. //首先恢复此次操作之前的图像,然后再添加Rectangle
  151. this.Frm_Main_Paint(this, new PaintEventArgs(this.CreateGraphics(), this.ClientRectangle));
  152. g.DrawRectangle(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
  153. break;
  154. case (int)drawTools.String:
  155. break;
  156. case (int)drawTools.Rubber:
  157. //用背景色绘制宽线段
  158. g.DrawLine(new Pen(backColor, 20), oldPoint, new Point(e.X, e.Y));
  159. ig.DrawLine(new Pen(backColor, 20), oldPoint, new Point(e.X, e.Y));
  160. oldPoint.X = e.X;
  161. oldPoint.Y = e.Y;
  162. break;
  163. }
  164. }
  165. }
  166. bool isDrawing = false;
  167. private void Form1_MouseUp(object sender, MouseEventArgs e)
  168. {
  169. isDrawing = false;
  170. switch (drawTool)
  171. {
  172. case (int)drawTools.Line:
  173. ig.DrawLine(new Pen(foreColor, 1), startPoint, new Point(e.X, e.Y));
  174. break;
  175. case (int)drawTools.Ellipse:
  176. ig.DrawEllipse(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
  177. break;
  178. case (int)drawTools.Rectangle:
  179. ig.DrawRectangle(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
  180. break;
  181. }
  182. }
  183.  
  184. private void Frm_Main_Paint(object sender, PaintEventArgs e)
  185. {
  186. //将Image中保存的图像,绘制出来
  187. Graphics g = this.CreateGraphics();
  188. if (theImage != null)
  189. {
  190. g.Clear(Color.White);
  191. g.DrawImage(theImage, this.ClientRectangle);
  192. }
  193. }
  194.  
  195. private void toolStripButton1_Click(object sender, EventArgs e)
  196. {
  197. toolStripButton6.Checked = false;
  198. toolStripButton2.Checked = false;
  199. toolStripButton3.Checked = false;
  200. toolStripButton4.Checked = false;
  201. toolStripButton5.Checked = false;
  202. if (drawTool == (int)drawTools.Pen)
  203. {
  204. drawTool = (int)drawTools.None ;
  205. toolStripButton1.Checked = false ;
  206. }
  207. else
  208. {
  209. drawTool = (int)drawTools.Pen;
  210. toolStripButton1.Checked = true;
  211. }
  212. }
  213.  
  214. private void toolStripButton2_Click(object sender, EventArgs e)
  215. {
  216. toolStripButton1.Checked = false;
  217. toolStripButton6.Checked = false;
  218. toolStripButton3.Checked = false;
  219. toolStripButton4.Checked = false;
  220. toolStripButton5.Checked = false;
  221. if (drawTool == (int)drawTools.Line)
  222. {
  223. drawTool = (int)drawTools.None;
  224. toolStripButton2.Checked = false;
  225. }
  226. else
  227. {
  228. drawTool = (int)drawTools.Line;
  229. toolStripButton2.Checked = true;
  230. }
  231. }
  232.  
  233. private void toolStripButton3_Click(object sender, EventArgs e)
  234. {
  235.  
  236. toolStripButton1.Checked = false;
  237. toolStripButton2.Checked = false;
  238. toolStripButton6.Checked = false;
  239. toolStripButton4.Checked = false;
  240. toolStripButton5.Checked = false;
  241. if (drawTool == (int)drawTools.Rectangle)
  242. {
  243. drawTool = (int)drawTools.None;
  244. toolStripButton3.Checked = false;
  245. }
  246. else
  247. {
  248. drawTool = (int)drawTools.Rectangle;
  249. toolStripButton3.Checked = true;
  250. }
  251. }
  252.  
  253. private void toolStripButton4_Click(object sender, EventArgs e)
  254. {
  255. toolStripButton1.Checked = false;
  256. toolStripButton2.Checked = false;
  257. toolStripButton3.Checked = false;
  258. toolStripButton6.Checked = false;
  259. toolStripButton5.Checked = false;
  260. if (drawTool == (int)drawTools.Ellipse)
  261. {
  262. drawTool = (int)drawTools.None;
  263. toolStripButton4.Checked = false;
  264. }
  265. else
  266. {
  267. drawTool = (int)drawTools.Ellipse;
  268. toolStripButton4.Checked = true;
  269. }
  270. }
  271.  
  272. private void toolStripButton5_Click(object sender, EventArgs e)
  273. {
  274.  
  275. toolStripButton1.Checked = false;
  276. toolStripButton2.Checked = false;
  277. toolStripButton3.Checked = false;
  278. toolStripButton4.Checked = false;
  279. toolStripButton6.Checked = false;
  280. if (drawTool == (int)drawTools.String)
  281. {
  282. drawTool = (int)drawTools.None;
  283. toolStripButton5.Checked = false;
  284. }
  285. else
  286. {
  287. drawTool = (int)drawTools.String;
  288. toolStripButton5.Checked = true;
  289. }
  290. }
  291.  
  292. private void toolStripButton6_Click(object sender, EventArgs e)
  293. {
  294. toolStripButton1.Checked = false;
  295. toolStripButton2.Checked = false;
  296. toolStripButton3.Checked = false;
  297. toolStripButton4.Checked = false;
  298. toolStripButton5.Checked = false;
  299. if (drawTool == (int)drawTools.Rubber )
  300. {
  301. drawTool = (int)drawTools.None;
  302. toolStripButton6.Checked = false;
  303. }
  304. else
  305. {
  306. drawTool = (int)drawTools.Rubber;
  307. toolStripButton6.Checked = true;
  308. }
  309. }
  310.  
  311. private void 颜色ToolStripMenuItem_Click(object sender, EventArgs e)
  312. {
  313. if (colorDialog1.ShowDialog() == DialogResult.OK)
  314. {
  315. foreColor = colorDialog1.Color ;
  316. }
  317.  
  318. }
  319. }
  320. }

  

金燕电子

C# 我的小画板的更多相关文章

  1. canvas小画板--(1)平滑曲线

    功能需求 项目需求:需要实现一个可以自由书写的小画板 简单实现 对于熟悉canvas的同学来说,这个需求很简单,短短几十行代码就能实现: <!doctype html> <html& ...

  2. canvas小画板——(2)荧光笔效果

    我们在上一篇文章中讲了如何绘制平滑曲线 canvas小画板——(1)平滑曲线. 透明度实现荧光笔 现在我们需要加另外一种画笔效果,带透明度的荧光笔.那可能会觉得绘制画笔的时候加上透明度就可以了.我们来 ...

  3. [原创]基于html5新标签canvas写的一个小画板

    最近刚学了canvas,写个小应用练习下 源代码 <!DOCTYPE> <html> <head> <meta http-equiv="Conten ...

  4. iOS小画板画线总结

    一:基本画线: 使用贝赛尔曲线画: //创建路径 UIBezierPath* aPath = [UIBezierPath bezierPath]; //设置线宽 aPath.lineWidth = 5 ...

  5. 用canvas画一个的小画板(PC端移动端都能用)

    前言 本篇的内容主要包括: canvas标签简介 画板的功能简介 画板的JS部分(包括:1.获取画布 2.使画板全屏幕显示且自适应 3.如何绘制直线 4.绘画时的三种状态(鼠标点击.移动.离开)5.画 ...

  6. canvas小画板——(3)笔锋效果

    画线准备 准备一个canvas <canvas id="canvasId" width="1000" height="800"> ...

  7. 开源 iOS 项目分类索引大全 - 待整理

    开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...

  8. 史上最全的常用iOS的第三方框架

    文章来源:http://blog.csdn.net/sky_2016/article/details/45502921 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片 ...

  9. 常用iOS的第三方框架

    图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等 ...

随机推荐

  1. StarUML最新版2.8.1简单使用及代码生成

    StarUML(简称SU)是一款开放源码的UML开发工具,由韩国公司主导开发出来的,可以直接到StarUML网站下载. 在这里直接超链接:http://staruml.io/download SU是一 ...

  2. CRLF Injection漏洞的利用与实例分析

    CRLF Injection很少遇见,这次被我逮住了.我看zone中(http://zone.wooyun.org/content/13323)还有一些同学对于这个漏洞不甚了解,甚至分不清它与CSRF ...

  3. mysql比较运算符和函数

    mysql> SELECT 15 BETWEEN 1 AND 22;+---------------------+| 15 BETWEEN 1 AND 22 |+---------------- ...

  4. sql server 横向转丛向及FOR XML PATH使用

    1.开始数据结构如下: 2.转为如下图: 使用如下SQL语句: ---横向转丛向 select name '姓名', max(case when course='语文' then score end) ...

  5. ThinkPHP5.0.21&5.1.* 代码执行和命令执行漏洞利用

    ThinkPHP5.0.21&5.1.* 代码执行和命令执行漏洞利用 ThinkPHP5.0.21&5.1.*  exploit code execution and command ...

  6. Eclipse下生成/编辑Java类图或时序图(UML)[转载]

    一 引用文章 1.[eclipse下生成Java类图和时序图,生成UML图(更完整版)](https://blog.csdn.net/guomainet309/article/details/5302 ...

  7. class按传递时分析

    class FEF{ public: int a; FEF(int a,int b){ this->a = a*b; } }; void mam(FEF a){ printf("%d ...

  8. Dan版本的nnet2

    除了chain,nnet1, nnet2, nnet3训练时调整转移模型,chain模型使用类似与MMI的训练准则 Dan's setup does not uses pre-training. Da ...

  9. ajax跨域请求のJSONP

    简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式. JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascript原生支持,后台语言几乎全部支持: 3.轻量级 ...

  10. Spring Boot:如何配置静态资源的地址与访问路径

    spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath ...