`
lovnet
  • 浏览: 6878962 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

C#绘制矢量图(Metafile,WMF,EMF)

 
阅读更多

主要的功能就是使用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);
}

产生的图形如下:

放大后效果:

分享到:
评论

相关推荐

    .NET下利用metafile类处理矢量图问题方案

    该文档描述了利用.NET下的metafile类解决矢量图处理问题,包括对矢量图的引入显示等,跟利用gdi+处理矢量图这种方式比较起来,利用metafile类特别简单方便。

    emf文件和wmf的转换

    EMF(Enhanced Metafile)和WMF(Windows Metafile)是两种常见的矢量图形文件格式,主要用于存储图像数据,特别是在Windows操作系统环境下。这两种格式都允许无损缩放和复杂图形的绘制,但EMF是WMF的增强版本,提供...

    在网页上浏览并缩放wmf、emf等图元文件

    在网页上浏览并缩放WMF(Windows Metafile Format)和EMF(Enhanced Metafile Format)等图元文件是一项技术挑战,因为这些格式通常在桌面应用中使用,而不是直接在Web环境中。WMF和EMF是矢量图形格式,它们可以存储...

    wmf转svgz、png

    2. EMF格式:EMF(Enhanced Metafile)是WMF的增强版,同样为矢量格式,它包含了更多的图形功能和色彩管理,支持透明度和更高的分辨率。EMF通常在需要更高质量输出时使用,但同样存在跨平台问题。 3. SVGZ格式:SVG...

    获取WMF、EMF图片中文字所用字体名称

    WMF(Windows Metafile Format)和EMF(Enhanced Metafile Format)是两种常见的矢量图像格式,广泛用于Windows操作系统。这两种格式允许存储复杂的图形信息,包括线条、曲线、文本、图像等,并且支持透明度和缩放等...

    基于C++实现的矢量图工具

    5. **文件格式支持**:矢量图工具有可能支持导入和导出常见的矢量图形文件格式,如SVG(Scalable Vector Graphics)或EMF(Enhanced Metafile),这涉及到解析和生成这些文件的代码。 6. **内存管理与优化**:由于...

    doc/docx转html,以及wmf与emf转jpg,png图片

    WMF(Windows Metafile Format)和EMF(Enhanced Metafile Format)是Windows系统中的矢量图形格式。为了将这些格式转换为位图格式(如jpg或png),我们可以使用Apache Batik。Batik是一个Java SVG工具包,虽然主要...

    wmf 转png/jpg

    本文将深入探讨如何将WMF(Windows Metafile Format)格式的图像转换为更通用且支持网络友好的PNG或JPG格式。WMF是一种矢量图形格式,主要用于Windows操作系统,而PNG和JPG则是常见的位图格式,广泛应用于网页和各种...

    emf&wmf转png.zip

    1. 图像读取:C#中的`System.Drawing.Imaging.Metafile`类用于读取EMF和WMF文件,它提供了一种方式来加载和操作这些矢量图形。 2. 图像处理:转换过程中可能涉及到图像大小调整、色彩空间转换、透明度处理等操作,这...

    C# 将打印机临时缓存文件SPL转为图片文件EMF

    2. **EMF文件**(Enhanced Metafile):EMF是一种矢量图形格式,支持复杂的图形操作,如旋转、缩放等,且不失真。它不仅包含图形信息,还记录了绘制这些图形的指令,这使得EMF文件在多种场景下都非常有用,比如图形...

    bmp转emf矢量图

    EMF(Enhanced Metafile)则是一种Windows元文件格式,它支持矢量图形和光栅图像。矢量图的特点在于它们基于数学对象(如线条、曲线和形状),而非像素。这意味着矢量图形可以无限放大而不会失去清晰度,非常适合...

    一个可以运行的VB6.0矢量绘图例程

    8. **图形的保存与加载**:可以使用`Metafile`类将绘制的矢量图形保存为WMF或EMF格式,这些格式保留了矢量信息,可以在不同大小的设备上保持清晰。 这个VB6.0矢量绘图实例不仅适用于学习基本的矢量绘图技术,还可以...

    EVA矢量图集第一弹

    本图集中的文件主要以EMF(Enhanced Metafile)和WMF(Windows Metafile)两种矢量图形格式提供。EMF是一种比WMF更先进的矢量图形格式,支持更多的颜色和图形效果,同时保留了向后兼容性。WMF则是一种较老的矢量图形...

    wmf文件格式详解

    WMF(Windows Metafile Format)是一种矢量图形文件格式,主要用于在Windows操作系统中存储图形和图像。WMF格式最初在Windows 3.0时代推出,目的是为了提供一种能够以较低的内存占用存储复杂图形的方式。由于它支持...

    将EMF加载成WINFORM的背景图片

    `Metafile`和`Bitmap`则分别代表矢量图和位图图像。 总结来说,要将EMF文件用作WinForm的背景,我们需要先加载EMF文件,然后创建一个与WinForm大小相同的Bitmap,利用Graphics对象将EMF图像绘制到Bitmap上,最后将...

    Emf2Png.zip

    - **EMF**:Enhanced Metafile是微软引入的一种高级元文件格式,它可以包含矢量图形和光栅图像,支持更多的图形操作和颜色深度,适用于打印和高分辨率显示。 - **PNG**:Portable Network Graphics是一种无损压缩...

    JAVA WMF 转换SVG,PNG

    本主题涉及的是将Windows Metafile Format (WMF) 和 Enhanced Metafile Format (EMF) 图像转换为更通用且网络友好的 Scalable Vector Graphics (SVG) 和 Portable Network Graphics (PNG) 格式。以下是对这个转换...

    将ICO,JPG,WMF,EMF图片类型转成BMP类型

    2. **EMF**(Enhanced Metafile):也是矢量图形格式,是WMF的增强版本,提供了更好的质量和更多的功能,尤其适用于高分辨率的显示。 #### 六、函数实现原理 该通用函数`Image2Bmp`接收一个字符串参数`FileName`,...

    将EMF图片格式转换成PNG

    EMF (Enhanced Metafile) 是Windows操作系统中用于存储矢量图形和光栅图像的文件格式,它在处理复杂的图形和图像是非常有效。而PNG(Portable Network Graphics)则是一种无损压缩的位图格式,广泛应用于网页设计、...

    wmf格式自动转换为jpg或png图片

    WMF(Windows Metafile Format)是一种矢量图形文件格式,主要在Microsoft Windows操作系统中使用。与位图格式(如JPEG或PNG)不同,WMF文件可以无损地放大而不会失真,因为它们存储的是图形的数学描述而非像素。...

Global site tag (gtag.js) - Google Analytics