Hardcoded thoughts… mostly in C# or php

EMF w C#

Obiekty typu Image w .net posiadają metodę Save(), której to w parametrach można podać tak ścieżkę, jak i format pliku wynikowego. Ciekawie się robi dopiero przy próbie użycia ImageFormat.EMF - teoretycznie wspierany przez .net, jednak już sama dokumentacja MSDN twierdzi, że sorry, ale nie ma lekko. Zapisywanie do EMF nie jest bowiem w C# obsługiwane - przy próbie podania takiego formatu, plik wynikowy przyjmie domyślny format PNG. Istnieje jednak prosty sposób na operowanie na obiektach Graphics i wyrzucanie efektów pracy do pliku EMF. Jak? Wystarczy nie używać metody Save(), która zawodzi. Poniżej obejście problemu.

C#:
  1. Graphics graphics = Graphics.FromImage(new Bitmap(1, 1, PixelFormat.Format32bppArgb));
  2. IntPtr hdc = tempGraphics.GetHdc();
  3. Metafile mfile = new Metafile("obraz.emf", hdc);
  4. tempGraphics.ReleaseHdc();
  5. graphics.Dispose();
  6. graphics = Graphics.FromImage(mfile);

Od tego momentu rysowanie na obiekcie graphics powoduje automatyczne odwzorowywanie zmian w pliku emf. Ważne by obiekt mfile (typu Metafile) był utworzony z podaniem uchwytu - tylko wtedy toto poprawnie działa.

No comments yet. Be the first.

Leave a reply