WmfToPng.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Imaging;
  4. using System.IO;
  5. namespace HTEXLib.DOCX.OpenXmlTool
  6. {
  7. public class WmfToPng
  8. {
  9. public static Stream Convert1(Stream stream)
  10. {
  11. var img = new Metafile(stream);
  12. Console.WriteLine("width=" + img.Width + ";height=" + img.Height);
  13. var header = img.GetMetafileHeader();
  14. var scale = header.DpiX / 96f;
  15. // 设置缩放倍数
  16. var multiple = SmartMultiple(img.Width);
  17. var bitmap = new Bitmap(img.Width * multiple, img.Height * multiple);
  18. var g = Graphics.FromImage(bitmap);
  19. g.Clear(Color.White);
  20. g.ScaleTransform(scale * multiple, scale * multiple);
  21. g.DrawImage(img, 0, 0);
  22. g.Dispose();
  23. Stream outStream = new MemoryStream();
  24. bitmap.Save(outStream, ImageFormat.Png);
  25. return outStream;
  26. }
  27. public static Stream Convert(Stream stream)
  28. {
  29. var img = new Metafile(stream);
  30. var header = img.GetMetafileHeader();
  31. var scale = header.DpiX / 96f;
  32. // 设置缩放倍数
  33. var multiple = SmartMultiple(img.Width);
  34. var bitmap = new Bitmap(img.Width * multiple, img.Height * multiple);
  35. var g = Graphics.FromImage(bitmap);
  36. g.DrawImageUnscaled(img, 0, 0);
  37. //g.Clear(Color.White);
  38. //g.ScaleTransform(scale * multiple, scale * multiple);
  39. //g.DrawImage(img, 0, 0);
  40. g.Dispose();
  41. Stream outStream = new MemoryStream();
  42. bitmap.Save(outStream, ImageFormat.Png);
  43. return outStream;
  44. }
  45. /**
  46. * 根据wmf文件本身的尺寸,获取缩放倍数
  47. */
  48. private static int SmartMultiple(int width)
  49. {
  50. var multiple = 1;
  51. if (width < 100)
  52. multiple = 10;
  53. else if (width < 200) multiple = 5;
  54. return multiple;
  55. }
  56. }
  57. }