[转] C#中绘制矢量图形
无涯 原文 C# 绘制矢量图形 [原创]
近来参与了一个项目,软件主要的功能就是使用C#画矢量图,然后导出到Word、Excel、Powerpoint中,并且能够再次被编辑。以下是我们的解决过程:
首先应该确定在Office文档中可编辑图形使用的格式;学习了相关资料,了解到Office文档主要支持三种矢量图的格式:1、VML图形,2、WMF 文件格式,3、EMF文件格式。由于VML图开一般使用HTML语言进行描述,不便于进行操作,因此决定采用WMF和EMF文件格式。
接下来的工作就是要让C#根据提供的数据生成WMF或EMF格式的矢量图形;学习了C#提供的GDI+绘图类库,GDI+可以绘制矢量图形,代码示例如下:
/// <summary>/// 导出为 Emf 或 Wmf 文件/// </summary>/// <param name="filePath">文件路径</param>/// <returns>是否成功</returns>private bool Export(string filePath){try{Bitmap bmp = new Bitmap(220,220);Graphics gs = Graphics.FromImage(bmp);Metafile mf = new Metafile(filePath,gs.GetHdc());Graphics g = Graphics.FromImage(mf);Draw(g);g.Save();g.Dispose();mf.Dispose();return true;}catch{return false;}}/// <summary>/// 绘制图形/// </summary>/// <param name="g">用于绘图的Graphics对象</param>private void Draw(Graphics g){HatchBrush hb = new HatchBrush(HatchStyle.LightUpwardDiagonal, Color.Black, Color.White);g.FillEllipse(Brushes.Gray,10f,10f,200,200);g.DrawEllipse(new Pen(Color.Black,1f),10f,10f,200,200);g.FillEllipse(hb,30f,95f,30,30);g.DrawEllipse(new Pen(Color.Black,1f),30f,95f,30,30);g.FillEllipse(hb,160f,95f,30,30);g.DrawEllipse(new Pen(Color.Black,1f),160f,95f,30,30);g.FillEllipse(hb,95f,30f,30,30);g.DrawEllipse(new Pen(Color.Black,1f),95f,30f,30,30);g.FillEllipse(hb,95f,160f,30,30);g.DrawEllipse(new Pen(Color.Black,1f),95f,160f,30,30);g.FillEllipse(Brushes.Blue,60f,60f,100,100);g.DrawEllipse(new Pen(Color.Black,1f),60f,60f,100,100);g.FillEllipse(Brushes.BlanchedAlmond,95f,95f,30,30);g.DrawEllipse(new Pen(Color.Black,1f),95f,95f,30,30);g.DrawRectangle(new Pen(System.Drawing.Brushes.Blue,0.1f),6,6,208,208);g.DrawLine(new Pen(Color.Black,0.1f),110f,110f,220f,25f);g.DrawString("剖面图",new Font("宋体",9f),Brushes.Green,220f,20f);
}
产生的图形如下:
放大后效果:
在Word 中编辑图形的效果:
至此,实现了该软件的技术要求功能。
[转] C#中绘制矢量图形相关推荐
- scratch绘制多边形_如何使用Scratch 3绘制矢量图形
scratch绘制多边形 Scratch是一种流行的视觉编程语言,用于创建视频游戏和动画. 它还具有矢量绘图工具,任何人都可以使用它来创建独特的游戏资产和艺术品. Scratch 1.0用Smallt ...
- HTML5中绘制图形
介绍HTML5中的一个新增元素--canvas元素以及伴随这个元素而来的一套编程接口--canvas API. 使用canvas API可以在页面上绘制出任何你想要的.非常漂亮的图形与图像,创造出更加 ...
- 学习如何在AutoCad土木工程中绘制建筑设计图
学习如何在AutoCad中绘制建筑设计图从平面图到AutoCad土木工程中的整栋建筑 你会学到: 如何绘制房屋地图 如何绘制建筑设计 如何从AutoCad打印或出图 AutoCaD使用 AutoCaD ...
- matlab 画 矩阵点,在MATLAB中绘制矩阵中点之间的线
3 个答案: 答案 0 :(得分:1) 这适用于我的数据结构: data = [ 0, 0, 1, 0;... 1, 0, 1, 1;... 1, 1, 0, 1;... 0, 1, 0, 0 ... ...
- Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小、自定义不同分组的气泡的色彩
Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot).通过size参数指定数据点的大小.自定义不同分组的气泡的色彩 目录
- Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小
Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot).通过size参数指定数据点的大小 目录
- R语言使用pROC包在同一图中绘制两条ROC曲线并通过假设检验检验ROC曲线的AUC或者偏AUC的差异(输出p值)
R语言使用pROC包在同一图中绘制两条ROC曲线并通过假设检验检验ROC曲线的AUC或者偏AUC的差异(输出p值) 目录
- R可视化ggplot2中绘制趋势线
R可视化ggplot2中绘制趋势线 目录 R可视化ggplot2中绘制趋势线 添加线性趋势线 添加线性趋势线并指定置信区间
- C# 在PDF中绘制动态图章
我们知道,动态图章,因图章中的时间.日期可以动态的生成,因而具有较强的时效性.在本篇文章中将介绍通过C#编程在PDF中绘制动态图章的方法,该方法可自动获取当前系统登录用户名.日期及时间信息并生成图章. ...
最新文章
- java.lang.ClassNotFoundException: Didn't find class org.apache.http.Protoco
- native 关键的理解
- 160家优秀国外技术公司博客
- dynamic和匿名对象
- 点到点链路上的OSPF协议
- 混合模型简介与高斯混合模型
- 【kafka】kafka 如何开启 kafka.consumer的监控指标项
- 《计算机应用基础》第05章在线测试,计算机应用基础.第五章测试及答案.doc
- WindowServer2003中IIS6.0允许运行32位程序
- android 自动生成aidl,[Android]用AIDL生成Service
- SQL server中的SQL语句拼接
- 万岳在线教育系统源码v1.1.4 支持录播回看/网课购买/学习测试
- 约瑟夫环c语言程序完整版,约瑟夫环C语言实现源代码(1)
- 【搜索引擎】强推!最好用资源最全的十个百度网盘搜索引擎
- 期末考试_细胞自动机
- 共享服务器文件溢出,文件共享锁定数溢出
- IRedMail迁移方案
- android启动过程中cpu降频,android省电开发之cpu降频
- SSL与数字证书,Htpps
- 一定要跟你喜欢的人去一次“稻城亚丁”好吗!