private void DrawFill(ToolpathSet pathSetIn, SKCanvas baseCanvas) { SKColor fillColor = SkiaUtil.Color(255, 0, 255, 255); SKRect bounds = baseCanvas.LocalClipBounds; SKBitmap blitBitmap = new SKBitmap(PixelDimensions.x, PixelDimensions.y, SkiaUtil.ColorType(), SKAlphaType.Premul); IntPtr len; using (var skSurface = SKSurface.Create(blitBitmap.Info.Width, blitBitmap.Info.Height, SkiaUtil.ColorType(), SKAlphaType.Premul, blitBitmap.GetPixels(out len), blitBitmap.Info.RowBytes)) { var canvas = skSurface.Canvas; canvas.Clear(SkiaUtil.Color(255, 255, 255, 255)); using (var paint = new SKPaint()) { paint.IsAntialias = true; paint.StrokeWidth = dimensionScale * PathDiameterMM; paint.Style = SKPaintStyle.Stroke; paint.StrokeCap = SKStrokeCap.Round; paint.StrokeJoin = SKStrokeJoin.Round; paint.Color = fillColor; Action <LinearToolpath3 <PrintVertex> > drawPath3F = (polyPath) => { if (polyPath.Type != ToolpathTypes.Deposition) { return; } Vector3d v0 = polyPath.Start.Position; byte layer_alpha = LayerFilterF(v0); if (layer_alpha != 255) { return; } SKPath path = MakePath(polyPath, SceneToSkiaF); canvas.DrawPath(path, paint); }; ProcessLinearPaths(pathSetIn, drawPath3F); } } SKPaint blitPaint = new SKPaint(); blitPaint.IsAntialias = false; blitPaint.BlendMode = SKBlendMode.SrcOver; blitPaint.Color = SkiaUtil.Color(0, 0, 0, 64); baseCanvas.DrawBitmap(blitBitmap, 0, 0, blitPaint); blitPaint.Dispose(); blitBitmap.Dispose(); }