本文转自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格式。怪哉!