Enumerate Metafile

image_pdfimage_print
   
 

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
   
class EnumMetafile: Form
{
     Metafile     mf;
     Panel        panel = new Panel();
   
     public static void Main()
     {
          Application.Run(new EnumMetafile());
     }
     public EnumMetafile()
     {
          Splitter splitter = new Splitter();
          splitter.Parent = this;
          splitter.Dock = DockStyle.Left; // Right;
   
          panel.Parent = this;
          panel.Dock = DockStyle.Left;
          panel.Paint += new PaintEventHandler(PanelOnPaint);
   
          Menu = new MainMenu();
          Menu.MenuItems.Add("&Open!", new EventHandler(MenuOpenOnClick));
     }
     void MenuOpenOnClick(object obj, EventArgs ea)
     {
          OpenFileDialog dlg = new OpenFileDialog();
          dlg.Filter = "All Metafiles|*.wmf;*.emf|" +
                       "Windows Metafile (*.wmf)|*.wmf|" +
                       "Enhanced Metafile (*.emf)|*.emf";
   
          if (dlg.ShowDialog() == DialogResult.OK)
          {
               mf = new Metafile(dlg.FileName);
               panel.Invalidate();
   
               Graphics grfx = CreateGraphics();
   
               grfx.EnumerateMetafile(mf, new Point(0, 0), 
                    new Graphics.EnumerateMetafileProc(EnumMetafileProc));
   
               grfx.Dispose();
          }
     }
     bool EnumMetafileProc(EmfPlusRecordType eprt, int iFlags,
                           int iDataSize, IntPtr ipData, 
                           PlayRecordCallback prc)
     {
          if (iDataSize > 0)
          {
               byte[] abyData = new Byte[iDataSize];
               Marshal.Copy(ipData, abyData, 0, iDataSize);
   
               foreach (byte by in abyData)
                    Console.WriteLine(" {0:X2}", by);
          }
          return true;
     }
     void PanelOnPaint(object obj, PaintEventArgs pea)
     {
          Panel    panel = (Panel) obj;
          Graphics grfx  = pea.Graphics;
   
          if (mf != null)
               grfx.DrawImage(mf, 0, 0);
     }
}

    


This entry was posted in 2D Graphics. Bookmark the permalink.