Ejemplo n.º 1
0
        public void TestDisposal()
        {
            var plotModel = (IPlotModel)ShowCases.CreateNormalDistributionModel();

            ((PlotModel)plotModel).DefaultFont = "Arial";
            plotModel.Update(true);

            string ExportToBitmap(string fileName, SkiaRenderContext context)
            {
                using var bitmap = new SKBitmap(800, 600);
                using var canvas = new SKCanvas(bitmap);

                context.SkCanvas = canvas;
                canvas.Clear(SKColors.White);
                plotModel.Render(context, new OxyRect(0, 0, 800, 600));

                var path = Path.Combine(this.outputDirectory, fileName + ".png");

                using var fileStream = File.OpenWrite(path);
                using var skStream   = new SKManagedWStream(fileStream);
                bitmap.Encode(skStream, SKEncodedImageFormat.Png, 0);

                return(path);
            }

            using var renderContext = new SkiaRenderContext()
                  {
                      RenderTarget = RenderTarget.PixelGraphic
                  };
            var path1 = ExportToBitmap("export1", renderContext);

            string path2;

            using (var renderContext2 = new SkiaRenderContext()
            {
                RenderTarget = RenderTarget.PixelGraphic
            })
            {
                path2 = ExportToBitmap("export2", renderContext2);
            }

            var path3 = ExportToBitmap("export3", renderContext);

            PngAssert.AreEqual(path1, path2, null, null);
            PngAssert.AreEqual(path1, path3, null, null);
        }
Ejemplo n.º 2
0
    /// <inheritdoc/>
    public void Export(IPlotModel model, Stream stream)
    {
        using var skStream = new SKManagedWStream(stream);
        using var canvas   = SKSvgCanvas.Create(new SKRect(0, 0, Width, Height), skStream);

        if (!model.Background.IsInvisible())
        {
            canvas.Clear(model.Background.ToSKColor());
        }

        // SVG export does not work with UseTextShaping=true. However SVG does text shaping by itself anyway, so we can just disable it
        using var context = new SkiaRenderContext
              {
                  RenderTarget   = RenderTarget.VectorGraphic,
                  SkCanvas       = canvas,
                  UseTextShaping = false,
                  DpiScale       = Dpi / 96
              };
        //use fake dpi to scale, looks much better!
        model.Update(true);
        model.Render(context, new OxyRect(0, 0, Width / context.DpiScale, Height / context.DpiScale));
    }