无涯 原文 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#中绘制矢量图形相关推荐

  1. scratch绘制多边形_如何使用Scratch 3绘制矢量图形

    scratch绘制多边形 Scratch是一种流行的视觉编程语言,用于创建视频游戏和动画. 它还具有矢量绘图工具,任何人都可以使用它来创建独特的游戏资产和艺术品. Scratch 1.0用Smallt ...

  2. HTML5中绘制图形

    介绍HTML5中的一个新增元素--canvas元素以及伴随这个元素而来的一套编程接口--canvas API. 使用canvas API可以在页面上绘制出任何你想要的.非常漂亮的图形与图像,创造出更加 ...

  3. 学习如何在AutoCad土木工程中绘制建筑设计图

    学习如何在AutoCad中绘制建筑设计图从平面图到AutoCad土木工程中的整栋建筑 你会学到: 如何绘制房屋地图 如何绘制建筑设计 如何从AutoCad打印或出图 AutoCaD使用 AutoCaD ...

  4. matlab 画 矩阵点,在MATLAB中绘制矩阵中点之间的线

    3 个答案: 答案 0 :(得分:1) 这适用于我的数据结构: data = [ 0, 0, 1, 0;... 1, 0, 1, 1;... 1, 1, 0, 1;... 0, 1, 0, 0 ... ...

  5. Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小、自定义不同分组的气泡的色彩

    Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot).通过size参数指定数据点的大小.自定义不同分组的气泡的色彩 目录

  6. Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小

    Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot).通过size参数指定数据点的大小 目录

  7. R语言使用pROC包在同一图中绘制两条ROC曲线并通过假设检验检验ROC曲线的AUC或者偏AUC的差异(输出p值)

    R语言使用pROC包在同一图中绘制两条ROC曲线并通过假设检验检验ROC曲线的AUC或者偏AUC的差异(输出p值) 目录

  8. R可视化ggplot2中绘制趋势线

    R可视化ggplot2中绘制趋势线 目录 R可视化ggplot2中绘制趋势线 添加线性趋势线 添加线性趋势线并指定置信区间

  9. C# 在PDF中绘制动态图章

    我们知道,动态图章,因图章中的时间.日期可以动态的生成,因而具有较强的时效性.在本篇文章中将介绍通过C#编程在PDF中绘制动态图章的方法,该方法可自动获取当前系统登录用户名.日期及时间信息并生成图章. ...

最新文章

  1. java.lang.ClassNotFoundException: Didn't find class org.apache.http.Protoco
  2. native 关键的理解
  3. 160家优秀国外技术公司博客
  4. dynamic和匿名对象
  5. 点到点链路上的OSPF协议
  6. 混合模型简介与高斯混合模型
  7. 【kafka】kafka 如何开启 kafka.consumer的监控指标项
  8. 《计算机应用基础》第05章在线测试,计算机应用基础.第五章测试及答案.doc
  9. WindowServer2003中IIS6.0允许运行32位程序
  10. android 自动生成aidl,[Android]用AIDL生成Service
  11. SQL server中的SQL语句拼接
  12. 万岳在线教育系统源码v1.1.4 支持录播回看/网课购买/学习测试
  13. 约瑟夫环c语言程序完整版,约瑟夫环C语言实现源代码(1)
  14. 【搜索引擎】强推!最好用资源最全的十个百度网盘搜索引擎
  15. 期末考试_细胞自动机
  16. 共享服务器文件溢出,文件共享锁定数溢出
  17. IRedMail迁移方案
  18. android启动过程中cpu降频,android省电开发之cpu降频
  19. SSL与数字证书,Htpps
  20. 一定要跟你喜欢的人去一次“稻城亚丁”好吗!

热门文章

  1. Unable to start activity ComponentInfo
  2. 学习Html之后总结的超全的思维导图!
  3. 交叉表的简单实现2:使用前端程序实现
  4. [CSAPP笔记][第一章计算机系统漫游]
  5. iOS设备中垂直同步开启后的帧率计数
  6. Mysql 字符串分隔
  7. HTML5 INPUT placeholder及兼容性处理
  8. 如何调用系统的包安装自己的apk呢?
  9. 25 iOS performance TipsTricks 笔记
  10. 信息化建设工程的有效成本及定价分析(1)