基于

Visual Studio 2012

.net framework 4.5

效果截图:

代码:

https://download.csdn.net/download/talkwah/10482880

代码预览:

using System;
using System.Drawing;
using System.Windows.Forms; namespace WFA画图
{
public partial class Form1 : Form
{
#region 成员变量
Point m_p1, m_p2;
bool m_flgKeuDowm = false;
Bitmap m_mapStart;
Bitmap m_mapEnd;
Bitmap m_mapInit;
Graphics m_graphics;
#endregion public Form1()
{
InitializeComponent();
m_graphics = pictureBox1.CreateGraphics(); // 最初的背景图存起来,清除绘制图形时用
m_mapInit = (Bitmap)pictureBox1.BackgroundImage;
} #region 鼠标事件
/// <summary>
/// 鼠标按下
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
m_flgKeuDowm = true;
_initPoint(e); } /// <summary>
/// 鼠标移动
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (!m_flgKeuDowm)
{
return;
}
else
{
m_p2 = new Point(e.X, e.Y);
} int width = Math.Abs(e.X - m_p1.X);
int height = Math.Abs(e.Y - m_p1.Y); _draw();
} /// <summary>
/// 鼠标抬起
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
m_flgKeuDowm = false; // 最终的图片设为背景图
pictureBox1.BackgroundImage = m_mapEnd; // 起止点初始化
_initPoint(e);
}
#endregion private void _draw(){ // 每次的【终止图】都是取自【起始图】
m_mapEnd = (Bitmap)m_mapStart.Clone();
Graphics g = Graphics.FromImage(m_mapEnd);
Pen pen = new Pen(Color.Red,);
if (rdoRect.Checked)
{
Point p1,p2;
_swapPoint(out p1,out p2 );
int width = Math.Abs(p2.X - p1.X);
int height = Math.Abs(p2.Y - p1.Y);
g.DrawRectangle(pen, p1.X, p1.Y, width, height);
}else if(rdoLine.Checked){
// 画直线不用转换点坐标,直接用成员变量的Point
g.DrawLine(pen, m_p1, m_p2);
} m_graphics.DrawImage(m_mapEnd, new Point(, ));
} private void _initPoint(MouseEventArgs e)
{
m_p1 = new Point(e.X, e.Y);
m_p2 = m_p1; if (pictureBox1.BackgroundImage != null)
{
m_mapStart = (Bitmap)pictureBox1.BackgroundImage;
}
} private void _printPoint(Point p)
{
Console.WriteLine(p.X+","+p.Y);
} private void _swapPoint(out Point _p1, out Point _p2)
{
//实现画框随意翻转
_p1 = m_p1;
_p2 = m_p2;
if (m_p1.X > m_p2.X)
{
int tmp = _p1.X;
_p1.X = _p2.X;
_p2.X = tmp;
}
if (m_p1.Y > m_p2.Y)
{
int tmp = _p1.Y;
_p1.Y = _p2.Y;
_p2.Y = tmp;
}
} #region 按钮
private void btnClear_Click(object sender, EventArgs e)
{
pictureBox1.BackgroundImage = m_mapInit;
} private void btnSave_Click(object sender, EventArgs e)
{
// 保存
SaveFileDialog dlg = new SaveFileDialog();
dlg.DefaultExt = "png";
dlg.Filter = "Png Files|*.png";
dlg.FileName = "截图"; DialogResult dlgRet = dlg.ShowDialog();
if (dlgRet == DialogResult.OK)
{
pictureBox1.BackgroundImage.Save(dlg.FileName, System.Drawing.Imaging.ImageFormat.Png);
}
}
#endregion
}
}

C#绘图:带背景,拖鼠标画矩形和直线的更多相关文章

  1. jQuery背景跟随鼠标移动的网页导航

    首页 PSD模板 CSS模板 特效插件 源码下载 酷站欣赏 建站资源 建站教程 心境之旅 在线留言 设为首页 加入收藏 我要投稿 联系站长 Search     首页 PSD模板 CSS模板 特效插件 ...

  2. HTML5自学笔记[ 12 ]canvas绘图小示例之鼠标画线

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. PDFBox 打印带背景的文件速度慢

    打印慢的原因 java的RasterPrinterJob会执行很多次printPage方法 他应该是按块填充的, 如果页面元素非常复杂, 那么printPage方法可能会执行十几次. 而如果你用了如下 ...

  4. Lodop如何设置预览后导出带背景的图,打印不带背景图

    Lodop中的ADD_PRINT_SETUP_BKIMG,可以加载上背景图,该背景图在预览的时候可以显示也可以不显示,打印可以打印出来也可以不打印出来.一般套打,都是不打印背景图的,比如一些快递的快递 ...

  5. phpqrcode 分别生成普通、带logo、带背景带logo二维码

    前提:下载好 phpqrcode 类库 1.生成普通二维码 //引入类库 include('phpqrcode/phpqrcode.php'); //二维码里面的链接地址 $url="htt ...

  6. 鼠标画矩形openCV

    #include <cv.h> #include <highgui.h> #include <stdio.h> /*鼠标画矩形*/ void my_mouse_ca ...

  7. 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法

    在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法 [MXDRAW CAD控件文档] 下面帮助的完整例子,在控件安装目录的Sample\Ie\iedemo.htm中. 1.      主要用到 ...

  8. GIS空间分析案例教程——带背景和周围要素的逐要素导出地理

    GIS空间分析案例教程--带背景和周围要素的逐要素导出地理 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 目的:导出多边形要素类的每个要素 实 ...

  9. TP框架中生成带背景带文字的二维码

    首先下载一个phpqrcode的包放到/vendor目录下 链接:https://pan.baidu.com/s/18jV9DypYB_PHDhD6C0iedQ 提取码:qxuo 如果只是单纯生成二维 ...

随机推荐

  1. C语言简单计算一元二次方程

    #include <stdio.h> #include <math.h> /*计算一元二次方程的根*/ void Cal(double a,double b,double c) ...

  2. 11.sklearn中的朴素贝叶斯模型及其应用

    #1.使用朴素贝叶斯模型对iris数据集进行花分类 #尝试使用3种不同类型的朴素贝叶斯: #高斯分布型,多项式型,伯努利型 from sklearn import datasets iris=data ...

  3. pycharm汉化补丁

    将压缩包内容复制到 x:\xxx\JetBrains\PyCharm Community Edition 2019.1\lib 目录下 链接:https://pan.baidu.com/s/1TLEP ...

  4. zabbix使用客户端和不使用客户端监控指定端口

    监控指定端口也很简单,以监控181主机的22端口为例 点击已成功监控的181主机的监控项 点击创建监控项 使用客户端监控端口:选择键值net.tcp.listen[port],需要自己把port改成2 ...

  5. 快速搞定Word,提高你的工作效率

    调整字体大小快捷键   ctrl+中括号  []分别减小字体加大字体 取消显示回车符号  文件->选项->显示->取消段落标记 对比两列内容是否相同    在第三列输入以下公式=IF ...

  6. 原生JS实现选中的radio变为未选中

    需求如下,radio已经选中,再点击,取消选中状态. 效果如链接:演示地址 直接上代码: <!DOCTYPE html> <html> <head> <met ...

  7. 18.13 Uboot分析与移植

    18.13.1 使用JLink烧写Nor Flash JLink只支持烧写NOR Flash,不支持烧写Nand Flash. 1.准备工作:JLink的USB口接到电脑上,JLink的JTAG口用排 ...

  8. 解决jenkins git timeout的问题

    进入项目配置(project configure) "源码管理"选项卡中,找到Additional Behaviours点击旁边的 add   image.png 点击advanc ...

  9. JSP学习1---创建一个简单的jsp程序

    一.新建一个“Dynamic Web Project”动态Web项目 1.1输入项目名称 Project1,在Dynamic Web module version(动态Web模块版本),选择3.0(注 ...

  10. 黄聪:C#使用GeckoFx拦截监控Http数据

    找了整整两天,在大海捞针之后,终于在上古代码中找到了一个可用的.... 可以用喜极而泣来形容测试有效之后的心情!!! 跟cefsharp相比geckofx最大的优点就是模式更接近于IE,包括node. ...