Getting a DrawingContext for a wpf WriteableBitmap

前端 未结 5 463
逝去的感伤
逝去的感伤 2020-11-30 05:15

Is there a way to get a DrawingContext (or something similar) for a WriteableBitmap? I.e. something to allow you to call simple DrawLine

5条回答
  •  醉话见心
    2020-11-30 05:25

    I found sixlettervariables' solution the most workable one. However, there's a "drawingContext.Close()" missing. According to MSDN, "A DrawingContext must be closed before its content can be rendered". The result is the following utility function:

    public static BitmapSource CreateBitmap(
        int width, int height, double dpi, Action render)
    {
        DrawingVisual drawingVisual = new DrawingVisual();
        using (DrawingContext drawingContext = drawingVisual.RenderOpen())
        {
            render(drawingContext);
        }
        RenderTargetBitmap bitmap = new RenderTargetBitmap(
            width, height, dpi, dpi, PixelFormats.Default);
        bitmap.Render(drawingVisual);
    
        return bitmap;
    }
    

    This can then easily be used like this:

    BitmapSource image = ImageTools.CreateBitmap(
        320, 240, 96,
        drawingContext =>
        {
            drawingContext.DrawRectangle(
                Brushes.Green, null, new Rect(50, 50, 200, 100));
            drawingContext.DrawLine(
                new Pen(Brushes.White, 2), new Point(0, 0), new Point(320, 240));
        });
    

提交回复
热议问题