C#の落とし穴 (2): イメージをEMF形式で保存したつもりなのにPNGで保存される
System.Drawing.ImageクラスのSave()メソッドでイメージを保存する際、EMFやWMF形式を指定しても、期待通りには保存されません。
拡張子は.emfや.wmfになりますが、中身はPNGになってしまいます。
myImage.Save(output_path, ImageFormat.Emf);
参考: この動作は、Microsoft Docによると「.NET Framework の GDI+ コンポーネントに、ファイルを .wmf または emf ファイルとして保存するために使用できるエンコーダーがないために発生します」とのこと。
これは、Metafileクラスの、出力ファイル名を含んでいるコンストラクタを使用すれば回避できます。
Bitmap bitmap = new Bitmap(1, 1);
Graphics g = Graphics.FromImage(bitmap);
IntPtr hDC = g.GetHdc();
RectangleF rect = new Rectangle(256, 256);
Metafile meta = new Metafile(output_path, hDC, rect, MetafileFrameUnit.Pixel, EmfType.EmfPlusDual);
:
:
g.ReleaseHdc();
g.Dispose();
bitmap.Dispose();
meta.Dispose();