/// <summary> /// Exports the specified <see cref="PlotModel" /> to a png file. /// </summary> /// <param name="model">The model.</param> /// <param name="fileName">Name of the output file.</param> /// <param name="width">The width.</param> /// <param name="height">The height.</param> /// <param name="background">The background color.</param> public static void Export(IPlotModel model, string fileName, int width, int height, Pattern background = null) { using (var bm = new ImageSurface(Format.ARGB32, width, height)) { using (var g = new Context(bm)) { if (background != null) { g.Save(); g.SetSource(background); g.Rectangle(0, 0, width, height); g.Fill(); g.Restore(); } var rc = new GraphicsRenderContext { RendersToScreen = false }; rc.SetGraphicsTarget(g); model.Update(true); model.Render(rc, width, height); bm.WriteToPng(fileName); } } }
/// <summary> /// Initializes a new instance of the <see cref="PlotView" /> class. /// </summary> public PlotView() { this.renderContext = new GraphicsRenderContext(); // ReSharper disable DoNotCallOverridableMethodsInConstructor this.DoubleBuffered = true; // ReSharper restore DoNotCallOverridableMethodsInConstructor this.PanCursor = new Cursor(CursorType.Hand1); this.ZoomRectangleCursor = new Cursor(CursorType.Sizing); this.ZoomHorizontalCursor = new Cursor(CursorType.SbHDoubleArrow); this.ZoomVerticalCursor = new Cursor(CursorType.SbVDoubleArrow); this.AddEvents((int)(EventMask.ButtonPressMask | EventMask.ButtonReleaseMask | EventMask.EnterNotifyMask | EventMask.LeaveNotifyMask | EventMask.ScrollMask | EventMask.KeyPressMask | EventMask.PointerMotionMask)); this.CanFocus = true; }
/// <summary> /// Exports the specified <see cref="PlotModel" /> to the specified <see cref="Stream" />. /// </summary> /// <param name="model">The model.</param> /// <param name="stream">The output stream.</param> public void Export(IPlotModel model, Stream stream) { using (var bm = new ImageSurface(Format.ARGB32, this.Width, this.Height)) { using (var g = new Context(bm)) { if (this.Background.IsVisible()) { g.Save(); using (var pattern = new SolidPattern(this.Background.R, this.Background.G, this.Background.B, this.Background.A)) { g.SetSource(pattern); g.Rectangle(0, 0, this.Width, this.Height); g.Fill(); } g.Restore(); } var rc = new GraphicsRenderContext { RendersToScreen = false }; rc.SetGraphicsTarget(g); model.Update(true); model.Render(rc, this.Width, this.Height); // write to a temporary file var tmp = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid() + ".png"); bm.WriteToPng(tmp); var bytes = File.ReadAllBytes(tmp); // write to the stream stream.Write(bytes, 0, bytes.Length); // delete the temporary file File.Delete(tmp); } } }
/// <summary> /// Initializes a new instance of the <see cref="PlotView" /> class. /// </summary> public PlotView() : base(null, null) { this.renderContext = new GraphicsRenderContext(); // ReSharper disable DoNotCallOverridableMethodsInConstructor this.DoubleBuffered = true; // ReSharper restore DoNotCallOverridableMethodsInConstructor this.PanCursor = new Cursor(CursorType.Hand1); this.ZoomRectangleCursor = new Cursor(CursorType.Sizing); this.ZoomHorizontalCursor = new Cursor(CursorType.SbHDoubleArrow); this.ZoomVerticalCursor = new Cursor(CursorType.SbVDoubleArrow); this.AddEvents((int)(EventMask.ButtonPressMask | EventMask.ButtonReleaseMask | EventMask.EnterNotifyMask | EventMask.LeaveNotifyMask | EventMask.ScrollMask | EventMask.KeyPressMask | EventMask.PointerMotionMask)); this.CanFocus = true; }
/// <summary> /// Exports the specified <see cref="PlotModel" /> to the specified <see cref="Stream" />. /// </summary> /// <param name="model">The model.</param> /// <param name="stream">The output stream.</param> public void Export(IPlotModel model, Stream stream) { using (var bm = new ImageSurface(Format.ARGB32, this.Width, this.Height)) { using (var g = new Context(bm)) { if (this.Background.IsVisible()) { g.Save(); using (var pattern = new SolidPattern(this.Background.R, this.Background.G, this.Background.B, this.Background.A)) { g.SetSource(pattern); g.Rectangle(0, 0, this.Width, this.Height); g.Fill(); } g.Restore(); } var rc = new GraphicsRenderContext { RendersToScreen = false }; rc.SetGraphicsTarget(g); model.Update(true); model.Render(rc, this.Width, this.Height); // write to a temporary file var tmp = Guid.NewGuid() + ".png"; bm.WriteToPng(tmp); var bytes = File.ReadAllBytes(tmp); // write to the stream stream.Write(bytes, 0, bytes.Length); // delete the temporary file File.Delete(tmp); } } }