public DrawingContext CreateDrawingContext()
        {
            var             fb          = _surface.Lock();
            PixelFormatShim shim        = null;
            SKImageInfo     framebuffer = new SKImageInfo(fb.Width, fb.Height, TranslatePixelFormat(fb.Format),
                                                          SKAlphaType.Opaque);
            var surface = SKSurface.Create(framebuffer, fb.Address, fb.RowBytes) ??
                          (shim = new PixelFormatShim(framebuffer, fb.Address, fb.RowBytes))
                          .CreateSurface();

            if (surface == null)
            {
                throw new Exception("Unable to create a surface for pixel format " + fb.Format +
                                    " or pixel format translator");
            }
            var canvas = surface.Canvas;



            canvas.RestoreToCount(0);
            canvas.Save();
            canvas.Clear(SKColors.Red);
            canvas.ResetMatrix();
            var scale = Matrix.CreateScale(fb.Dpi.Width / 96, fb.Dpi.Height / 96);

            return(new DrawingContext(new DrawingContextImpl(canvas, scale, canvas, surface, shim, fb)));
        }
Example #2
0
        public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
        {
            var             fb          = _surface.Lock();
            PixelFormatShim shim        = null;
            SKImageInfo     framebuffer = new SKImageInfo(fb.Width, fb.Height, fb.Format.ToSkColorType(),
                                                          SKAlphaType.Premul);
            var surface = SKSurface.Create(framebuffer, fb.Address, fb.RowBytes) ??
                          (shim = new PixelFormatShim(framebuffer, fb.Address, fb.RowBytes))
                          .CreateSurface();

            if (surface == null)
            {
                throw new Exception("Unable to create a surface for pixel format " + fb.Format +
                                    " or pixel format translator");
            }
            var canvas = surface.Canvas;



            canvas.RestoreToCount(0);
            canvas.Save();
            canvas.ResetMatrix();
            var scale = Matrix.CreateScale(fb.Dpi.Width / 96, fb.Dpi.Height / 96);

            return(new DrawingContextImpl(canvas, visualBrushRenderer, scale, canvas, surface, shim, fb));
        }