Beispiel #1
0
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("MetafileTool - Convert Windows metafile into image file and vice verca.");
                Console.WriteLine("Usage:\n\tMetafileTool <input file> <output file>");
                return;
            }

            switch (Path.GetExtension(args[0]).ToLower())
            {
            case ".emf":
            case ".wmf":
                using (var metafile = new Metafile(args[0]))
                    using (var bitmap = MetafileUtility.MetafileToBitmap(metafile))
                        bitmap.Save(args[1]);
                break;

            default:
                using (var bitmap = new Bitmap(args[0]))
                    using (var metafileStream = MetafileUtility.BitmapToMetafileMemoryStream(bitmap))
                        using (var targetStream = File.Create(args[1]))
                            metafileStream.WriteTo(targetStream);
                break;
            }
        }
Beispiel #2
0
        private void exportAsButton__Click(object sender, EventArgs e)
        {
            if (metafileCanvas_.Metafile == null)
            {
                return;
            }

            using (var saveFileDialog = new SaveFileDialog())
            {
                var filters = new string[]
                {
                    "Bitmap Files (*.bmp;*.dib)|*.bmp;*.dib",
                    "JPEG Files (*.jpg;*.jpeg)|*.jpg;*.jpeg",
                    "PNG Files (*.png)|*.png",
                    "Windows Meta Files (*.emf;*.wmf)|*.emf;*.wmf",
                    "All Files (*.*)|*.*",
                };

                saveFileDialog.FileName    = Path.GetFileNameWithoutExtension(filePath_);
                saveFileDialog.Filter      = string.Join("|", filters);
                saveFileDialog.FilterIndex = 3;

                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    switch (Path.GetExtension(saveFileDialog.FileName).ToLower())
                    {
                    case ".emf":
#if false
                        // TODO:
                        // If orientation is changed, then the exported emf file can not be opened with
                        // this application anymore.
                        metafileCanvas_.Metafile.Save(saveFileDialog.FileName, ImageFormat.Emf);
#else
                        var metafile = metafileCanvas_.Metafile;
                        MetafileUtility.CopyMetafile(ref metafile, saveFileDialog.FileName);
                        metafileCanvas_.Metafile = metafile;
#endif
                        break;

                    case ".wmf":
                        metafile = metafileCanvas_.Metafile;
                        MetafileUtility.MetafileToWMF(ref metafile, saveFileDialog.FileName);
                        metafileCanvas_.Metafile = metafile;
                        break;

                    default:
                        using (var bitmap = MetafileUtility.MetafileToBitmap(metafileCanvas_.Metafile))
                        {
                            bitmap.Save(saveFileDialog.FileName);
                        }
                        break;
                    }
                }
            }
        }
        private void propertiesComboBox__SelectedIndexChanged(object sender, EventArgs e)
        {
            var selectedItem = propertiesComboBox_.SelectedItem;

            if (selectedItem == null)
            {
                return;
            }

            switch (selectedItem.ToString())
            {
            case "Metafile":
                propertyGrid_.SelectedObject = metafile_;
                break;

            case "MetafileHeader":
                propertyGrid_.SelectedObject = metafile_.GetMetafileHeader();
                break;

            case "ENHMETAHEADER":
                using (var metafile = MetafileUtility.CopyMetafile(ref metafile_))
                {
                    // Metafile.GetHenhmetafile is just a wrapper of GdipGetHemfFromMetafile:
                    // https://github.com/dotnet/runtime/blob/78c6505cffe2558b036fbe44cd27038affbb6cce/src/libraries/System.Drawing.Common/src/System/Drawing/Imaging/Metafile.Windows.cs#L379-L383
                    // and according to:
                    // http://www.jose.it-berater.org/gdiplus/reference/flatapi/graphics/gdipgethemffrommetafile.htm
                    // > GdipGetHemfFromMetafile:
                    // > This method sets the Metafile object to an invalid state. The user is responsible for calling DeleteEnhMetafile,
                    // > to delete the Windows handle.
                    var enhMetafileHandle = metafile.GetHenhmetafile();
                    if (enhMetafileHandle != IntPtr.Zero)
                    {
                        var header = Gdi32.GetEnhMetaFileHeader(enhMetafileHandle);
                        propertyGrid_.SelectedObject = new EnhMetaHeader(header);

                        Gdi32.DeleteEnhMetaFile(enhMetafileHandle);
                    }
                }
                break;

            default:
                Debug.Assert(false);
                break;
            }
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            if (args.Length != 1 && args.Length != 2)
            {
                Console.WriteLine("Usage:\n\tEmfToWmf <input.emf> [output.wmf]\n");
                return;
            }

            var inputEmfFilePath  = args[0];
            var outputWmfFilepath = args.Length == 2 ? args[1] : Path.ChangeExtension(inputEmfFilePath, ".wmf");

#if false
            using (var metafile = new Metafile(inputEmfFilePath))
                MetafileUtility.MetafileToWMF(metafile, outputWmfFilepath);
#else
            using (var metafile = new Metafile(inputEmfFilePath))
                using (var outputFile = new FileStream(outputWmfFilepath, FileMode.CreateNew))
                {
                    var bytes = MetafileUtility.GetMetafileRawBytes(metafile);
                    outputFile.Write(bytes, 0, bytes.Length);
                }
#endif
        }