Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var path = @"c:foo.emf"
- var g = CreateGraphics(); // get a graphics object from your form, or wherever
- var img = new Metafile(path, g.GetHdc()); // file is created here
- var ig = Graphics.FromImage(img);
- // call drawing methods on ig, causing writes to the file
- ig.Dispose(); img.Dispose(); g.ReleaseHdc(); g.Dispose();
- [DllImport("gdi32")] uint GetEnhMetaFileBits(IntPtr hemf, uint cbBuffer, byte[] lpbBuffer);
- IntPtr h = metafile.GetHenhMetafile();
- int size = GetEnhMetaFileBits(h, 0, 0);
- byte[] data = new byte[size];
- GetEnhMetaFileBits(h, size, data);
- using (FileStream w = File.Create("out.emf")) {
- w.Write(data, 0, size);
- }
- // TODO: I don't remember whether the handle needs to be closed, but I guess not.
- Graphics grfx = CreateGraphics();
- MemoryStream ms = new MemoryStream();
- IntPtr ipHdc = grfx.GetHdc();
- Metafile mf = new Metafile(ms, ipHdc);
- grfx.ReleaseHdc(ipHdc);
- grfx.Dispose();
- grfx = Graphics.FromImage(mf);
- grfx.FillEllipse(Brushes.Gray, 0, 0, 100, 100);
- grfx.DrawEllipse(Pens.Black, 0, 0, 100, 100);
- grfx.DrawArc(new Pen(Color.Red, 10), 20, 20, 60, 60, 30, 120);
- grfx.Dispose();
- mf.Save(@"C:file.emf", ImageFormat.Emf);
- mf.Save(@"C:file.png", ImageFormat.Png);
- <System.Runtime.InteropServices.DllImportAttribute("gdi32.dll", EntryPoint:="GetEnhMetaFileBits")> _
- Public Shared Function GetEnhMetaFileBits(<System.Runtime.InteropServices.InAttribute()> ByVal hEMF As System.IntPtr, ByVal nSize As UInteger, ByVal lpData As IntPtr) As UInteger
- End Function
- <System.Runtime.InteropServices.DllImportAttribute("gdi32.dll", EntryPoint:="GetEnhMetaFileBits")> _
- Public Shared Function GetEnhMetaFileBits(<System.Runtime.InteropServices.InAttribute()> ByVal hEMF As System.IntPtr, ByVal nSize As UInteger, ByVal lpData() As Byte) As UInteger
- End Function
- Dim h As IntPtr = mf.GetHenhmetafile()
- CopyEnhMetaFileW(h, FileName)
Add Comment
Please, Sign In to add comment