[转] C#中绘制矢量图形

简介:

无涯 原文 C# 绘制矢量图形 [原创]

 

    近来参与了一个项目,软件主要的功能就是使用C#画矢量图,然后导出到Word、Excel、Powerpoint中,并且能够再次被编辑。以下是我们的解决过程:

    首先应该确定在Office文档中可编辑图形使用的格式;学习了相关资料,了解到Office文档主要支持三种矢量图的格式1、VML图形,2、WMF 文件格式,3、EMF文件格式由于VML图开一般使用HTML语言进行描述,不便于进行操作,因此决定采用WMF和EMF文件格式。

    接下来的工作就是要让C#根据提供的数据生成WMF或EMF格式的矢量图形;学习了C#提供的GDI+绘图类库,GDI+可以绘制矢量图形,代码示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
   /// <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 中编辑图形的效果:



至此,实现了该软件的技术要求功能。

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。






    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5823579.html,如需转载请自行联系原作者



相关文章
|
存储 搜索推荐 C#
WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中
WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中
197 0
|
搜索推荐 C# Windows
基于C#的图形化用户设计来构造个性化的记事本(附完整版代码)
基于C#的图形化用户设计来构造个性化的记事本(附完整版代码)
258 0
基于C#的图形化用户设计来构造个性化的记事本(附完整版代码)
|
XML 前端开发 JavaScript
推荐一个C#操作SVG图形矢量图的开源项目
一个支持.Net Framework 与 .Net Core版本的SVG图形操作库。这个项目集成了SVG各项API,让开发人员可以在.Net很轻松的实现SVG图形的操作,通过SVG文件转换为图片文件。
755 0
推荐一个C#操作SVG图形矢量图的开源项目
|
前端开发 Windows
C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码
原文:C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码 C#WPF 如何绘制几何图形? 怎么绘制坐标系?绘制sin曲线(正弦曲线)? 这离不开Path(System.Windows.Shapes)和StreamGeometry(System.Windows.Media)类。
2414 0
|
C#
C# 操作Excel图形——绘制、读取、隐藏、删除图形
简介 本篇文章将介绍C# 如何处理Excel图形相关的问题,包括以下内容要点: 1.绘制图形    1.1 绘制图形并添加文本到图形    1.2 添加图片到图形    1.3 设置图形阴影效果 2. 提取图形中的文本、图片 3.
1898 0
|
C#
C# 绘制PDF图形——基本图形、自定义图形、色彩透明度
引言 在PDF中我们可以通过C#程序代码来添加非常丰富的元素来呈现我们想要表达的内容,如绘制表格、文字,添加图形、图像等等。在本篇文章中,我将介绍如何在PDF中绘制图形,并设置图形属性的操作。   文章中将分以下要点进行介绍: 1. 绘制基本图形(线条、椭圆、圆形、矩形、三角形) 2. 绘制自定义图形 3. 绘制图形并设置图形透明度   所需工具:Spire.PDF for .NET 4.0 提示:安装后,直接引用安装路径下Bin文件夹中的dll文件到项目程序中即可。
1589 0
|
XML 人工智能 C#
C#如何在VS2015 2017版本中编写WPF UI界面引入第三方SVG图形
原文:C#如何在VS2015 2017版本中编写WPF UI界面引入第三方SVG图形 在VS2015 2017版本中编写WPF UI界面引入第三方SVG图形     最近在写WPF界面的时候遇到一个情况,由于界面已经由UI设计师用PS和AI软件画好了,在做UI的时候直接照着图做就行.
1870 0