如何用C#程序如何画六边形形

7723人阅读
C#开发/WPF/Entity/WinForm/C#游戏(25)
欢迎大家提出意见,一起讨论!
转载请标明是引用于
通过本实例了解如何在窗体上绘制各种图形,如矩形、椭圆、线条、文字等。运行效果如下:
实现过程:
(1) 新建窗体应用程序
(2) 添加一个MenuScrip控件;添加一个ToolScrip控件。
在ToolScrip控件中对每个单元,要将DisplayStyle属性改为Text
(3)程序代码。
1、新建菜单事件主要用白色清除窗体的背景,从而实现“文件新建”功能
private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
Graphics g = this.CreateGraphics();
g.Clear(backColor);
toolStrip1.Enabled =
//创建一个Bitmap
theImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
editFileName = &新建文件&;
//修改窗口标题
this.Text = &MyDraw\t& + editFileN
ig = Graphics.FromImage(theImage);
ig.Clear(backColor);
2、打开事件用于打开“打开文件”对话框,并选择相应的图片,将图片绘制到窗体上.
private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
openFileDialog1.Multiselect =
if (openFileDialog1.ShowDialog() == DialogResult.OK)
//修改窗口标题
this.Text = &MyDraw\t& + openFileDialog1.FileN
editFileName = openFileDialog1.FileN
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 =
(3) 保存菜单项的Click事件用于将窗体背景保存为BMP格式的图片
private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
saveFileDialog1.Filter = &图像(*.bmp)|*.bmp&;
saveFileDialog1.FileName = editFileN
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
theImage.Save(saveFileDialog1.FileName, ImageFormat.Bmp);
this.Text = &MyDraw\t& + saveFileDialog1.FileN
editFileName = saveFileDialog1.FileN
(4) 在Paint事件中将Image中保存的图像,绘制出来
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);
&(5)添加Frm_Text.cs文字输入框。
&&& 添加一个Window窗体,取名为Frm_Text,然后对窗体的属性修改:
把FormBorderStyle属性改为 N
把Modifiers的属性改为 Public
(6) 在窗体的MouseDown事件中,如果当前绘制的是字符串,在鼠标的当前位置显示文本框;如果绘制的是图开,设置图形的起始位置。
private void Frm_Main_MouseDown(object sender, MouseEventArgs e)
if (e.Button == MouseButtons.Left)
//如果选择文字输入,则打开strInput窗体
if (drawTool == drawTools.String)
Frm_Text inputBox = new Frm_Text();
inputBox.StartPosition = FormStartPosition.CenterP
if (inputBox.ShowDialog() == DialogResult.OK)
Graphics g = this.CreateGraphics();
Font theFont = this.F
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);
(7) 在窗体的MouseMove&事件中,根据鼠标移动的大小绘制指定的图形.
private void Form1_MouseMove(object sender, MouseEventArgs e)
g = this.CreateGraphics();
if (isDrawing)
switch (drawTool)
case drawTools.None:
case 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;
case 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));
case 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);
case 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);
case drawTools.String:
case 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;
(8) 在窗体的MouseUp事件中,根据用户选择的画笔,绘制直线,椭圆或矩形等指定图形。
private void Form1_MouseUp(object sender, MouseEventArgs e)
isDrawing =
switch (drawTool)
case drawTools.Line:
ig.DrawLine(new Pen(foreColor, 1), startPoint, new Point(e.X, e.Y));
case drawTools.Ellipse:
ig.DrawEllipse(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
case drawTools.Rectangle:
ig.DrawRectangle(new Pen(foreColor, 1), startPoint.X, startPoint.Y, e.X - startPoint.X, e.Y - startPoint.Y);
=============================================================================================================
这里解释为什么在拉直线时线会跟着鼠标动,而用选择画笔时移动鼠标就会画出线。
这里有两个Graphics:
(1)&真实的场景graphics.&&&它它上面画出的画面就是我个看到的画面。
&&&&&&&&&&&&&&&private void Form1_Paint(object sender, PaintEventArgs e)
&&&&&&&&&&& &{
&&&&&&&&&&&&&&&&&&& &//将Image中保存的图像,绘制出来
&&&&&&&&&&&&&&&&&&&&& Graphics g = this.CreateGraphics();
(2)做为临时存储用的Graphic.
它在新建的时候创建:
//创建一个Bitmap
theImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
editFileName = &新建文件&;
//修改窗口标题
this.Text = &MyDraw\t& + editFileN
ig = Graphics.FromImage(theImage);
ig.Clear(backColor);
显示出来: 把theImage显示出来就是把以前保存在ig里的东西显示出来了
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);
在Form1_MouseMove里
如果是画笔,那么把图像保存到了两个graphic中,这样我们可以看到移动的画,最后也将显示所有画。
如果直线或矩形,那么只先画到第一个graphics里,在鼠标放开时才画到第二个graphic里。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1698630次
积分:19068
积分:19068
排名:第278名
原创:243篇
转载:265篇
评论:421条
(1)(2)(5)(1)(1)(1)(2)(5)(4)(1)(1)(4)(3)(2)(6)(5)(14)(6)(4)(29)(20)(33)(25)(45)(49)(61)(55)(56)(69)c#画三角形,并填充颜色
c#画三角形,并填充颜色
  目前知道有两种方法:画多边形、GraphicsPath。但是用画多边形的方式画三角形不太好。老画不正的,截图放大就明显了。
  1&&&& Point point1 = new Point(0, 0);
  2&&&& Point point2 = new Point(11, 0);
  3&&&& Point point3 = new Point(5, 8);
  4&&&& Point[] pntArr = {point1, point2, point3};
  6&&&& e.Graphics.FillPolygon(Brushes.Red, pntArr);
  1&&&&&&&&&&&&&&&& int len = 10;
  2&&&&&&&&&&&&&&&& int x = 0;
  3&&&&&&&&&&&&&&&& int y = 0;
  4&&&&&&&&&&&&&&&& Point[] pntArr = new Point[3];
  5&&&&&&&&&&&&&&&& pntArr[0] = new Point(x, y);
  6&&&&&&&&&&&&&&&& pntArr[1] = new Point(x - len, y);
  7&&&&&&&&&&&&&&&& pntArr[2] = new Point(x - len / 2, (int)(len * Math.Sqrt(3) / 2 + y));
  8&&&&&&&&&&&&&&&& GraphicsPath path = new GraphicsPath();
  9&&&&&&&&&&&&&&&& path.AddLines(pntArr);
  10&&&&&&&&&&&&&&&& e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiA
  11&&&&&&&&&&&&&&&& e.Graphics.FillPath(Brushes.Red, path);
  12&&&&&&&&&&&&&&&& e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.D
关注微信,获得更多免费资源
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
港口与航道工程建设工程法规及相关知识建设工程经济考试大纲矿业工程市政公用工程通信与广电工程
操作系统汇编语言计算机系统结构人工智能数据库系统微机与接口
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
Powerpoint教程WPS教程
电子政务客户关系管理首席信息官办公自动化大数据
职称考试题目
就业指导签约违约职业测评
招生信息考研政治
网络安全安全设置工具使用手机安全
3DMax教程Flash教程CorelDraw教程Director教程
Dreamwaver教程HTML教程网站策划网站运营Frontpage教程
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
互联网电信IT业界IT生活
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
组织运营财务资本
视频播放文件压缩杀毒软件输入法微博
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&arcgis 指定半径画圆
在ArcGIS的制图过程中,地图整饰是一大块内容.但是地图整饰无外乎,地图主图区,接图表,图名,图例等.这些地图整饰内容都是绘制在Page Layout下的Enlemnt中的.制图过程中,工作量最大的有两部分内容,一部分是各个地图整饰单元之间的布局调整:另一部分内容就是主图区样式的调整,包括图廓的调整,参考格网的设置.
这里主要介绍地图格网的内容.经常制图的人需要设置和调整格网.一般来说,地图格网设置的前提是,已经把主图区的位置和比例尺设置好.其实在本质上,三个变量决定了
比起死板硬朗的矩形渔网,六边形的蜂巢网格越来越受欢迎.推荐个小工具,实现下面的效果: 1. 准备自己的兴趣区域和需要统计的要素.例如,下面的美国国境面(浅灰色),机场点数据. 2. ArcGIS Online上有 GISers 分享的生产六边形格网的工具: ModelBuilder版本的 Create Hexagon Tessellation Python版本的 Create
地震灾情损失快速格网化评估系统以地震行业专业化的评估模型和评估流程为业务依据,建立一套规范.流程和高效的地震灾情损失快速评估系统.系统基于建筑物易损性模型,计算不同结构建筑物在不同烈度区的建筑物破坏情况,从而估算人员伤亡和经济损失情况;并快速生成专题报表和专题图输出为领导提供决策依据. 模块组成 本系统包括震害评估与分析.专题图平台.查询统计.数据管理.辅助工具和系统功能6个模 ...
经纬度格网类LatLongGrid继承自可渲染对象类RenderableObject,是WorldWind中用来在星球外表绘制经纬度格网的封装类.其类图如下所示.
绘制经纬网格的主体函数为Render(),其内部主要调用以下函数完成绘制: ComputeGridValues()//计算格网值 RenderTropicLine()//绘制回归线
计算格网值ComputeG ...
Geometry Clipmaps: Terrain Rendering Using Nested Regular Grids 几何裁剪图下的使用嵌套的规则格网渲染地形
Frank Losasso Hugues Hoppe 张嘉华(翻译) 梁成(翻译.女) 斯坦福大学和微软研究院 微软研究院 华南理工大学 华南理工大学
使用粗糙的geometr
网格索引——点要素(图元),线.面要素,有冗余 四叉树索引——线.面要素,有冗余 改进的四叉树索引——线.面要素 R树——空间重叠 一.网格索引,四叉树索引 在 介绍空间索引之前,先谈谈什么叫“索引“.对一个数据集做”索引“,是为了提高对这个数据集检索的效率.书的”目录“就是这本书内容的”索引“,当我们拿 到一本新书,想查看感兴趣内容的时候,我们会先查看目录,确定感兴趣的内容会在哪些页里,直接翻到那些页,就OK了,而不是从第一章节开始翻,一个字一个 字地找我们感兴趣的内容,直到找到为止,这种检索
2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK OTTO和Jacob Thornton所设计和建立,在github上开源之后,迅速成为该站上最多人watch&fork的项目.大量工程师踊跃为该项目贡献代码,社区惊人地活跃 ...
一.简介 原理:按照格网大小将区域进行划分,由一个矩形格网替代当前范围内的数据,由格网中心数字代替格网的权重(可以为格网中数据的数量,数据某权重的平均值.最大值.最小值等), 由格网之间颜色的不同表达渐变性 特点:结合了热点图和聚散的特性,具有热点图的对权重的层次渐变直观性以及聚散解决数据量过大的优势. 应用场景:热点格网图将大量数据以格网显示,减少了浏览器的负荷,在格网扩展开 ...
主要代码文件为index.hpp index.cpp index.hpp中定义了几个宏 //最大内存限制,默认为10M #define LIBLAS_INDEX_MAXMEMDEFAULT
// 10 megs default //最小内存,默认为1M #define LIBLAS_INDEX_MINMEMDEFAULT 1000000
// 1 meg at least has to be allowed //最大格网数量,不超过25万个 #define LIBLAS_
打开系统工具箱&Cartography Tools.tbx&注记&MapServerCacheTilingSchemeToPolygons,如下图所示: 打开Data Management Tools&要素&要素折点转点,可以生成要素折点,在通过添加XY坐标给点要素添加经纬度坐标值,若点要素有重复,可以点击&融合&工具进行点要素 ...
一.打开ArcMAP并加载上相应的点图层和边界面图层 二.ArcToolbox--Spatial Analyst工具--差值分析--克里金法(根据不同的情况选择不同的算法,这次的处理实际上使用的是样条函数法,比其它算法更平滑,操作步骤类似,参数设置可以设置试试效果),依次进行以下设置 点击环境进行详细设置 下一步的设置“像元大小”是解决锯齿的关键步骤,掩膜主要作用是设置出图范围 ...
参考如下帖子:/linhugh/archive//2606439.html\ C# 代码如下 IFeatureClass pNewFtCls = Asssit.CrtFtCls((IFeatureWorkspace)pWs, nfn, confgDataTable, pGeoDef); IFeatureClassLoad pFclsLoad = pNewFtCls as IFeatureClassL pFclsLoad.Lo
program main !sms网格转换成mike21网格 DIMENSION X(60),Y(60),H(60),NDNN(110,3),ncbd(10) dimension NBS(50),NOBD(5,50),NSED(5,50),id0(80),nbi(50) dimension x0(50),y0(50),h0(50) character*2 a*2,b*2,gnn*3,demo*500 open(3,file='./(after).grd',status='old
我的声明: 代号为:Sunny 自日起,我将分阶段完全公开我自己总结写出的C++几何运算库源代码.这些代码是我这些年的积累,来源具体也说不清楚了,这些代码都是经过我彻底精心动手打造的,每个字符.如果对您的工作有价值,请多发表评论和意见吧,同时也希望得到您的指点!
这些代码完全按C++思想设计和实现,可以应用在2D.3D商业图形程序中.代码中所有说明.注释都是英文.希望这个不算问题.
下面的版权信息必须放在代码文件的最前面. License Information: * C
最近需要用百米网格进行空间叠加分析,首先得自动生成百米网格数据.经过查找,发现ARCgis可以自动生成网格.方法如下 2.创建格网(Creat Fishnet).需要用到ArcGIS的ArcToolbox-&Data Management Tools-&Feature Class-&Create Fishnet功能.参数设置如下图所示.其中,四至(Left.B ...
通过 &Data Driven Page& 可以基于单个地图文档,快速创建一系列布局页面.按照图层中的各个索引要素,将地图分割为多个部分,分别生成相应的地图. 可见,索引要素是决定地图出图的重要部分,常见的索引方式,例如:网格索引,带状索引等等. Data Driven Page 工具条上的设置,主要也是来配置索引图层,那索引图层如何制作?
ArcGIS ...
坐标系统与投影变换及在ArcGIS桌面产品中的应用 1.地球椭球体(Ellipsoid) 2.大地基准面(Geodetic datum) 3.投影坐标系统(Projected Coordinate Systems ) 4.坐标系统和投影变换在桌面产品中的应用 5.World files文件
GIS处理的是空间信息,而所有对空间信息的量算都是基于某个坐标系统的,因此GIS中坐 ...
坐标系统与投影变换及在ARCGIS中的应用 概述: 本文共可分为如下几个部分组成: 地球椭球体(Ellipsoid) 大地基准面(Geodetic datum) 投影坐标系统(Projected Coordinate Systems ) 坐标系统和投影变换在桌面产品中的应用
一.World files文件 GIS处 理的是空间信息,而所有对空间信息的量算都是基于某个坐标系统 ...
空间数据库技术 空间数据库技术用关系数据库管理系统(RDBMS)来管理空间数据,主要解决存储在关系数据库中的空间数据与应用程序之间的数据接口问题,即空间数据库引擎( Spatial Database Engine).更确切地说,空间数据库技术是解决空间数据对象中几何属性在关系数据库中的存取问题,其主要任务是: 1)用关系数据库存储管理空间数据: 2)从数据库中读取空间数据,并转换为GIS应用程序能够接收和使用的格式: 3)将GIS应用程序中的空间数据导入数据库,交给关系数据库管理.因此空间数
在旅游规划中,考虑旅游景点周边的人口负载量是很重要的一个方面,这将直接影响资源的投入和配置,开发潜力和规模等.基于GIS可以将人口信息进行空间化的展示,还可以通过空间分析的方法计算出旅游景点辐射区的人口负载量,从而为规划提供依据.我们需要的就是去找到人口数据和旅游景点的数据,让ArcGIS来帮助我们统计出旅游辐射区的人口信息. 一.数据获取 我们可以从网站上下载 ...
这项研究部分基于NSF制定的EIA-0113539 ITR/SY+PE:&提高软件测试者的教育.& 材料中表达的任何观点.发现和结论或者评论都属于作者,不代表国家科学基金会(NSF)的观点. 摘要 ...
题目链接:/showproblem.php?pid=2444 题意:判断所有人是否分为两个集合,每个集合里的人互不相识. 思路:先判断是否为二分图,是的话求最大匹配,否则 ...
手机名称有GSM:表示只支持中国联通或者中国移动2G号段(130.131.132.134.135.136.137.138.139.145.147.150.151.152.155.156.157.158.159.182 ...
模板下载: (1)可以直接下载本站发布的 Cnyunwei-Cacti+Nagios 集成 ...
ORA-600 [2662] &Block SCN is ahead of Current SCN& [ID 28929.1]
Modified 09-DEC-2010
在当当网举办特价活动时,消费者花50元就买到了原价488元的丛书,但是不成想这是网站方面的&乌龙&,订单随即不是被当当网取消就是被中途拦截.为此,6名认为遭受损失的消费者将当当网起诉到法院.昨天, ...
以下是笔者愚见:
先来了解一下Windows下的睡眠功能: 电脑在 睡眠状态时,将切断除内存外其他硬件配件的电源,工作状态的数据将保存在内存中,这样在重新唤醒电脑时,就可以快速恢复睡眠前的工作状态.
&声明一个boolean公共变量,表明当前httpconnection是否得到服务器回应.
你的连接线程中在连接之前置这个变量为false:
另起一个监视线程,拿到那个HttpConnectio ...
Android开发过程中
eclipse 经常会出现 logcat突然就是不现实log的 ...
首先是一个非常简单的题目,如何将一个数字反过来,比如12345反转成54321: 可以选择将数字转换成字符串然后进行首尾换位操作,但更经典的作法应该是依次从原数字尾部取数,加到结果的高位: 深入思考一下,如何将数字按 ...当前位置: >
css3轻松实现六边形
时间: 09:25 来源:互联网 作者:源码搜藏 浏览:
css3 Draw Hive
提示:您可以先修改部分代码再运行,保存代码功能在Firefox下无效。
CSS3多边形实例,轻松实现一个六边形布局,是一个规则的六边形,三个罗列在一起,看一看CSS3&Draw的功能有多强大。有评论说,这其实就是先实现正多边形,然后平移图形,用取色器获取RGB值。
由源码搜藏网整理,转载请注明出处
你可能感兴趣的内容

我要回帖

更多关于 如何画六边形 的文章

 

随机推荐