{"id":197,"date":"2009-08-10T10:27:24","date_gmt":"2009-08-10T09:27:24","guid":{"rendered":"http:\/\/floris.briolas.nl\/floris\/?p=197"},"modified":"2014-07-28T15:53:58","modified_gmt":"2014-07-28T14:53:58","slug":"c-saving-as-emf","status":"publish","type":"post","link":"https:\/\/floris.briolas.nl\/floris\/2009\/08\/c-saving-as-emf\/","title":{"rendered":"C# saving as EMF"},"content":{"rendered":"<p>This is a useful piece of code, created as an extension method on MetaFile to save a Metafile as a real Vector based emf not as a PNG. See : <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/bb882579.aspx\">msdn on image encoders \/ decoders.<\/a><\/p>\n<p>Here is the code:<\/p>\n<pre class=\"c#\" name=\"code\">using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Runtime.InteropServices;\r\nusing System.IO;\r\n\r\nnamespace System.Drawing.Imaging\r\n{\r\n    public static class ExtensionMethods\r\n    {\r\n        public static void SaveAsEmf(this Metafile me, string fileName)\r\n        {\r\n            \/* http:\/\/social.msdn.microsoft.com\/Forums\/en-US\/csharpgeneral\/thread\/12a1c749-b320-4ce9-aff7-9de0d7fd30ea\r\n                How to save or serialize a Metafile: Solution found\r\n                by : SWAT Team member _1\r\n                Date : Friday, February 01, 2008 1:38 PM\r\n             *\/\r\n            int enfMetafileHandle = me.GetHenhmetafile().ToInt32();\r\n            int bufferSize = GetEnhMetaFileBits(enfMetafileHandle, 0, null); \/\/ Get required buffer size.\r\n            byte[] buffer = new byte[bufferSize]; \/\/ Allocate sufficient buffer\r\n            if (GetEnhMetaFileBits(enfMetafileHandle, bufferSize, buffer) &lt;= 0) \/\/ Get raw metafile data.\r\n                throw new SystemException(\"Fail\");\r\n\r\n            FileStream ms = File.Open(fileName, FileMode.Create);\r\n            ms.Write(buffer, 0, bufferSize);\r\n            ms.Close();\r\n            ms.Dispose();\r\n            if (!DeleteEnhMetaFile(enfMetafileHandle)) \/\/free handle\r\n                throw new SystemException(\"Fail Free\");\r\n        }\r\n\r\n        [DllImport(\"gdi32\")]\r\n        public static extern int GetEnhMetaFileBits(int hemf, int cbBuffer, byte[] lpbBuffer);\r\n\r\n        [DllImport(\"gdi32\")]\r\n        public static extern bool DeleteEnhMetaFile(int hemfbitHandle);\r\n    }\r\n}\r\n<\/pre>\n<p>How to use this code?<\/p>\n<pre class=\"c#\" name=\"code\">            \/\/Set up reference Graphic\r\n            Graphics refG = this.CreateGraphics(); \/\/assumin this code is running on a control\/form\r\n            IntPtr refGrap = refG.GetHdc();\r\n            var img = new Metafile(refGrap, EmfType.EmfPlusDual, \"..\");\r\n\r\n            \/\/Draw some silly drawing\r\n            using (var g = Graphics.FromImage(img))\r\n            {\r\n                var r = new Rectangle(0,0,100,100);\r\n                var reye1 = new Rectangle(20, 20, 20, 30);\r\n                var reye2 = new Rectangle(70, 20, 20, 30);\r\n\r\n                var pBlack = new Pen(Color.Black, 3);\r\n                var pRed = new Pen(Color.Red, 2.5f);\r\n\r\n                g.FillEllipse(Brushes.Yellow, r);\r\n                g.FillEllipse(Brushes.White, reye1);\r\n                g.FillEllipse(Brushes.White, reye2);\r\n                g.DrawEllipse(pBlack, reye1);\r\n                g.DrawEllipse(pBlack, reye2);\r\n                g.DrawBezier(pRed, new Point(10, 50), new Point(10, 100), new Point(90, 100), new Point(90, 50));\r\n            }\r\n\r\n            refG.ReleaseHdc(refGrap); \/\/cleanup\r\n            refG.Dispose();\r\n\r\n            img.SaveAsEmf(\"test.emf\");  \/\/chose this line\r\n\r\n            \/\/img.Save(\"test2.emf\", ImageFormat.Emf); \/\/or this line\r\n<\/pre>\n<p>The end result:<\/p>\n<p><a href=\"http:\/\/floris.briolas.nl\/floris\/wp-content\/uploads\/2009\/08\/saveAsEmf.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-thumbnail wp-image-276\" title=\"saveAsEmf\" src=\"http:\/\/floris.briolas.nl\/floris\/wp-content\/uploads\/2009\/08\/saveAsEmf-150x150.png\" alt=\"\" width=\"150\" height=\"150\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a useful piece of code, created as an extension method on MetaFile to save a Metafile as a real Vector based emf not as a PNG. See : msdn on image encoders \/ decoders. Here is the code: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.IO; namespace System.Drawing.Imaging { [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_newsletter_tier_id":0,"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[3],"tags":[7,12],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p61yPs-3b","_links":{"self":[{"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/posts\/197"}],"collection":[{"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/comments?post=197"}],"version-history":[{"count":12,"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/posts\/197\/revisions"}],"predecessor-version":[{"id":405,"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/posts\/197\/revisions\/405"}],"wp:attachment":[{"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/media?parent=197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/categories?post=197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/floris.briolas.nl\/floris\/wp-json\/wp\/v2\/tags?post=197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}