C#保存EMF矢量图形文件

本文转自http://www.cozyboy.com/archives/76.html

 

 

MSDN中有写.Net Framework没有EMF的编码器,如果对调用Save方法,保存的只是个PNG格式。

MSDN原文:

如果图像的文件格式的编码器不存在,则使用可移植网络图形 (PNG) 编码器。使用 Save 方法将图形图像保存为 Windows 图元文件格式 (WMF) 或增强型图元文件格式 (EMF) 文件时,结果文件将另存为可移植网络图形 (PNG) 文件。 发生此行为是由于 .NET Framework 的 GDI+ 组件没有可用来将文件另存为 .wmf 或 .emf 文件的编码器。

When you use the Save method to save a graphic image as a Windows Metafile Format (WMF) or Enhanced Metafile Format (EMF) file, the resulting file is saved as a Portable Network Graphics (PNG) file instead. This behavior occurs because the GDI+ component of the .NET Framework does not have an encoder that you can use to save files as .wmf or .emf files.

但实际操作中发现,确实还是可以保存正确的EMF文件的。

比如下段代码:

string filePath = @”D:\face.emf”;

Bitmap bmp = new Bitmap(220, 220);
Graphics gs = Graphics.FromImage(bmp);
Metafile mf = new Metafile(filePath, gs.GetHdc());

Graphics g = Graphics.FromImage(mf);

g.FillEllipse(Brushes.Gray, 0, 0, 100, 100);
g.DrawEllipse(Pens.Black, 0, 0, 100, 100);
g.DrawArc(new Pen(Color.Red, 10), 20, 20, 60, 60, 30, 120);

g.Save();
g.Dispose();
mf.Dispose();

打开文件,会看到一个可以无损缩放的笑脸。

仔细看,这里调用的是g.Save()!!(其实不调用也可以,估计g在Dispose的时候自动保存了)

但是如果调用Metafile的Save方法,则保存的是一个PNG格式。怪哉!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值