WPF -- 使用RenderTargetBitmap将Canvas保存为图片

在WPF中对控件进行截图是非常方便的,使用RenderTargetBitmap即可实现。但是如果是对Canvas这种类型的容器控件进行截图,截图的范围可能不准。此时可以使用如下方法对Canvas进行截图,方法来自Clemens

public void WriteToPng(UIElement element, string filename)
{
    var rect = new Rect(element.RenderSize);
    var visual = new DrawingVisual();

    using (var dc = visual.RenderOpen())
    {
        dc.DrawRectangle(new VisualBrush(element), null, rect);
    }

    var bitmap = new RenderTargetBitmap(
        (int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default);
    bitmap.Render(visual);

    var encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(bitmap));

    using (var file = File.OpenWrite(filename))
    {
        encoder.Save(file);
    }
}
posted @ 2021-04-20 10:20  louzi  阅读(463)  评论(0编辑  收藏  举报