/// <summary> /// /// </summary> /// <param name="bitmap"></param> /// <param name="shapes"></param> /// <param name="properties"></param> /// <param name="ic"></param> /// <returns></returns> public MemoryStream MakeMetafileStream( Bitmap bitmap, IEnumerable<BaseShape> shapes, ImmutableArray<ShapeProperty> properties, IImageCache ic) { var g = default(Graphics); var mf = default(Metafile); var ms = new MemoryStream(); try { using (g = Graphics.FromImage(bitmap)) { var hdc = g.GetHdc(); mf = new Metafile(ms, hdc); g.ReleaseHdc(hdc); } using (g = Graphics.FromImage(mf)) { var r = new EmfRenderer(72.0 / 96.0); r.State.ImageCache = ic; g.SmoothingMode = SmoothingMode.HighQuality; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; g.CompositingQuality = CompositingQuality.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.PageUnit = GraphicsUnit.Display; if (shapes != null) { foreach (var shape in shapes) { shape.Draw(g, r, 0, 0, properties, null); } } r.ClearCache(isZooming: false); } } finally { if (g != null) { g.Dispose(); } if (mf != null) { mf.Dispose(); } } return ms; }
/// <summary> /// /// </summary> /// <param name="bitmap"></param> /// <param name="container"></param> /// <param name="ic"></param> /// <returns></returns> public MemoryStream MakeMetafileStream( Bitmap bitmap, Container container, IImageCache ic) { var g = default(Graphics); var mf = default(Metafile); var ms = new MemoryStream(); try { using (g = Graphics.FromImage(bitmap)) { var hdc = g.GetHdc(); mf = new Metafile(ms, hdc); g.ReleaseHdc(hdc); } using (g = Graphics.FromImage(mf)) { var r = new EmfRenderer(72.0 / 96.0); r.State.ImageCache = ic; g.SmoothingMode = SmoothingMode.HighQuality; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; g.CompositingQuality = CompositingQuality.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.PageUnit = GraphicsUnit.Display; if (container.Template != null) { r.Draw(g, container.Template, container.Properties, null); } r.Draw(g, container, container.Properties, null); r.ClearCache(isZooming: false); } } finally { if (g != null) { g.Dispose(); } if (mf != null) { mf.Dispose(); } } return ms; }