我的画板

先看实现图

实现过程

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//**********************金燕电子****************************************
namespace huaban
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
toolStrip1.Enabled = false;
foreColor = Color.Black ;
backColor = Color.White ;
}
Color backColor = new Color();
private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
g.Clear(backColor);
toolStrip1.Enabled = true;
//创建一个Bitmap
theImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
editFileName = "新建文件";
//修改窗口标题
this.Text = "MyDraw\t" + editFileName;
ig = Graphics.FromImage(theImage);
ig.Clear(backColor);
}
string editFileName = "";
private Image theImage;
public Graphics ig { get; private set; } private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
{
openFileDialog1.Multiselect = false;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//修改窗口标题
this.Text = "MyDraw\t" + openFileDialog1.FileName;
editFileName = openFileDialog1.FileName;
theImage = Image.FromFile(openFileDialog1.FileName);
Graphics g = this.CreateGraphics();
g.DrawImage(theImage, this.ClientRectangle);
ig = Graphics.FromImage(theImage);
ig.DrawImage(theImage, this.ClientRectangle);
//ToolBar可以使用了
toolStrip1.Enabled = true;
}
} private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
{
saveFileDialog1.Filter = "图像(*.bmp)|*.bmp";
saveFileDialog1.FileName = editFileName;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
theImage.Save(saveFileDialog1.FileName, ImageFormat.Bmp);
this.Text = "MyDraw\t" + saveFileDialog1.FileName;
editFileName = saveFileDialog1.FileName;
}
} private void Form1_Paint(object sender, PaintEventArgs e)
{
//将Image中保存的图像,绘制出来
Graphics g = this.CreateGraphics();
if (theImage != null)
{
g.Clear(Color.White);
g.DrawImage(theImage, this.ClientRectangle);
}
}
Color foreColor = new Color();
private void Form1_MouseDown(object sender, MouseEventArgs e)
{ if (e.Button == MouseButtons.Left)
{
//如果选择文字输入,则打开strInput窗体
if (drawTool == (int)drawTools.String)
{
Frm_Text inputBox = new Frm_Text();
inputBox.StartPosition = FormStartPosition.CenterParent;
if (inputBox.ShowDialog() == DialogResult.OK)
{
Graphics g = this.CreateGraphics();
Font theFont = this.Font;
g.DrawString(inputBox.textBox1.Text, theFont, new SolidBrush(foreColor), e.X, e.Y);
ig.DrawString(inputBox.textBox1.Text, theFont, new SolidBrush(foreColor), e.X, e.Y);
}
}
//如果开始绘制,则开始记录鼠标位置
else if ((isDrawing = !isDrawing) == true)
{
startPoint = new Point(e.X, e.Y);
oldPoint = new Point(e.X, e.Y);
}
}
}
int drawTool = 0;
enum drawTools
{
None = 0,
Pen = 1,
Line = 2,
Ellipse = 3,
Rectangle = 4,
String = 5,
Rubber =6
}
Point oldPoint = new Point();
Point startPoint = new Point();
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Graphics g;
g = this.CreateGraphics(); if (isDrawing)
{
switch (drawTool)
{
case (int)drawTools.None:
break;
case (int)drawTools.Pen:
//从上一个点到当前点绘制线段
g.DrawLine(new Pen(foreColor, 1), oldPoint, new Point(e.X, e.Y));
ig.DrawLine(new Pen(foreColor, 1), oldPoint, new Point(e.X, e.Y));
oldPoint.X = e.X;
oldPoint.Y = e.Y;
break;
case (int)drawTools.Line:
//首先恢复此次操作之前的图像,然后再添加Line
this.Frm_Main_Paint(this, new PaintEventArgs(this.CreateGraphics(), this.ClientRectangle));
g.DrawLine(new Pen(foreColor, 1), startPoint, new Point(e.X, e.Y));
break;
case (int)drawTools.Ellipse:
//首先恢复此次操作之前的图像,然后再添加Ellipse
this.Frm_Main_Paint(this, new PaintEventArgs(this.CreateGraphics(), this.ClientRectangle));
g.DrawEllipse(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
break;
case (int)drawTools.Rectangle:
//首先恢复此次操作之前的图像,然后再添加Rectangle
this.Frm_Main_Paint(this, new PaintEventArgs(this.CreateGraphics(), this.ClientRectangle));
g.DrawRectangle(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
break;
case (int)drawTools.String:
break;
case (int)drawTools.Rubber:
//用背景色绘制宽线段
g.DrawLine(new Pen(backColor, 20), oldPoint, new Point(e.X, e.Y));
ig.DrawLine(new Pen(backColor, 20), oldPoint, new Point(e.X, e.Y));
oldPoint.X = e.X;
oldPoint.Y = e.Y;
break;
}
}
}
bool isDrawing = false;
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
isDrawing = false;
switch (drawTool)
{
case (int)drawTools.Line:
ig.DrawLine(new Pen(foreColor, 1), startPoint, new Point(e.X, e.Y));
break;
case (int)drawTools.Ellipse:
ig.DrawEllipse(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
break;
case (int)drawTools.Rectangle:
ig.DrawRectangle(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
break;
}
} private void Frm_Main_Paint(object sender, PaintEventArgs e)
{
//将Image中保存的图像,绘制出来
Graphics g = this.CreateGraphics();
if (theImage != null)
{
g.Clear(Color.White);
g.DrawImage(theImage, this.ClientRectangle);
}
} private void toolStripButton1_Click(object sender, EventArgs e)
{
toolStripButton6.Checked = false;
toolStripButton2.Checked = false;
toolStripButton3.Checked = false;
toolStripButton4.Checked = false;
toolStripButton5.Checked = false;
if (drawTool == (int)drawTools.Pen)
{
drawTool = (int)drawTools.None ;
toolStripButton1.Checked = false ;
}
else
{
drawTool = (int)drawTools.Pen;
toolStripButton1.Checked = true;
}
} private void toolStripButton2_Click(object sender, EventArgs e)
{
toolStripButton1.Checked = false;
toolStripButton6.Checked = false;
toolStripButton3.Checked = false;
toolStripButton4.Checked = false;
toolStripButton5.Checked = false;
if (drawTool == (int)drawTools.Line)
{
drawTool = (int)drawTools.None;
toolStripButton2.Checked = false;
}
else
{
drawTool = (int)drawTools.Line;
toolStripButton2.Checked = true;
}
} private void toolStripButton3_Click(object sender, EventArgs e)
{ toolStripButton1.Checked = false;
toolStripButton2.Checked = false;
toolStripButton6.Checked = false;
toolStripButton4.Checked = false;
toolStripButton5.Checked = false;
if (drawTool == (int)drawTools.Rectangle)
{
drawTool = (int)drawTools.None;
toolStripButton3.Checked = false;
}
else
{
drawTool = (int)drawTools.Rectangle;
toolStripButton3.Checked = true;
}
} private void toolStripButton4_Click(object sender, EventArgs e)
{
toolStripButton1.Checked = false;
toolStripButton2.Checked = false;
toolStripButton3.Checked = false;
toolStripButton6.Checked = false;
toolStripButton5.Checked = false;
if (drawTool == (int)drawTools.Ellipse)
{
drawTool = (int)drawTools.None;
toolStripButton4.Checked = false;
}
else
{
drawTool = (int)drawTools.Ellipse;
toolStripButton4.Checked = true;
}
} private void toolStripButton5_Click(object sender, EventArgs e)
{ toolStripButton1.Checked = false;
toolStripButton2.Checked = false;
toolStripButton3.Checked = false;
toolStripButton4.Checked = false;
toolStripButton6.Checked = false;
if (drawTool == (int)drawTools.String)
{
drawTool = (int)drawTools.None;
toolStripButton5.Checked = false;
}
else
{
drawTool = (int)drawTools.String;
toolStripButton5.Checked = true;
}
} private void toolStripButton6_Click(object sender, EventArgs e)
{
toolStripButton1.Checked = false;
toolStripButton2.Checked = false;
toolStripButton3.Checked = false;
toolStripButton4.Checked = false;
toolStripButton5.Checked = false;
if (drawTool == (int)drawTools.Rubber )
{
drawTool = (int)drawTools.None;
toolStripButton6.Checked = false;
}
else
{
drawTool = (int)drawTools.Rubber;
toolStripButton6.Checked = true;
}
} private void 颜色ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
foreColor = colorDialog1.Color ;
} }
}
}

  

金燕电子

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. c#调用WebService实例

    在Winform中对数据库进行操作缺乏安全性,因而可以使用Winform调用WebService来实现对数据库的各种操作.在VS2010中,创建一个Web服务程序,第一:创建一个空的Web应用程序,名 ...

  2. EF 事物Transaction简单操作

    /// <summary> /// 申请提现 /// </summary> /// <param name="userId">用户id</ ...

  3. c++ 回调函数封装

    std::function<void(int a,int b)> ha; //函数封装  当成参数用callback  std::bind(&fun1,this,std::plac ...

  4. 第28月第23天 lineFragmentPadding

    1.lineFragmentPadding https://blog.csdn.net/lwb102063/article/details/78748186

  5. A Bayesian Approach to Deep Neural Network Adaptation with Applications to Robust Automatic Speech Recognition

    基于贝叶斯的深度神经网络自适应及其在鲁棒自动语音识别中的应用     直接贝叶斯DNN自适应 使用高斯先验对DNN进行MAP自适应 为何贝叶斯在模型自适应中很有用? 因为自适应问题可以视为后验估计问题 ...

  6. 对象关系映射(ORM)框架GreenDao简介和基本使用

    官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案. GreenDao特点 性能最大化,可能是Android平台上最快的ORM框架 易于使用的A ...

  7. 20165234 《Java程序设计》第八周学习总结

    第八周学习总结 教材内容学习 第十二章 Java 多线程机制 进程与线程 进程是程序的一次动态执行过程,对应了从代码加载.执行至执行完毕的一个完整过程. 线程不是进程,是比进程更小的执行单位. 一个进 ...

  8. python中用selenium调Firefox报错问题

    python在用selenium调Firefox时报错: Traceback (most recent call last):  File "G:\python_work\chapter11 ...

  9. oracle启用异步IO(db file async I/O submit)

    市局双随机awr报告中有大量db file async I/O submit等待事件 参考两篇文章: [案例]Oracle等待事件db file async I/O submit产生原因和解决办法 d ...

  10. 2017-2018-2 20165231 实验四 Android程序设计

    实验报告封面 课程:Java程序设计 班级:1652班 姓名:王杨鸿永 学号:20165231 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:15:25 - 17:15 实验序号:实验四 ...