C# 从画布上截图,大小大于20000像素

C# 从画布上截图,大小大于20000像素,c#,wpf,C#,Wpf,我需要从画布的一部分截图,但因为RenderTargetBitmap 不支持从一个区域截图首先我应该从整个画布截图,然后用CroppedBitmap截图 但问题是画布的大小大于20000px,当我使用from RenderTargetBitmap拍摄屏幕快照时,有时会出现内存不足的错误 你有没有办法只截取一个带有起点和终点的屏幕截图,而不是在WPF中从我的画布上截取一个屏幕截图?你可以通过如下所示的方法将UI元素中的裁剪区域渲染成位图 它使用带有适当颜色的VisualBrush将作物绘制到Dra

我需要从画布的一部分截图,但因为RenderTargetBitmap 不支持从一个区域截图首先我应该从整个画布截图,然后用CroppedBitmap截图

但问题是画布的大小大于20000px,当我使用from RenderTargetBitmap拍摄屏幕快照时,有时会出现内存不足的错误


你有没有办法只截取一个带有起点和终点的屏幕截图,而不是在WPF中从我的画布上截取一个屏幕截图?

你可以通过如下所示的方法将UI元素中的裁剪区域渲染成位图

它使用带有适当颜色的
VisualBrush
将作物绘制到
DrawingVisual
中,然后将其绘制到
RenderTargetBitmap

private BitmapSource RenderCrop(Visual element, Rect crop)
{
    var visualBrush = new VisualBrush
    {
        Visual = element,
        ViewboxUnits = BrushMappingMode.Absolute,
        Viewbox = crop,
        Stretch = Stretch.None
    };

    var drawingVisual = new DrawingVisual();

    using (var dc = drawingVisual.RenderOpen())
    {
        dc.DrawRectangle(visualBrush, null, new Rect(0, 0, crop.Width, crop.Height));
    }

    var bitmap = new RenderTargetBitmap(
        (int)Math.Round(crop.Width), (int)Math.Round(crop.Height),
        96, 96, PixelFormats.Default);

    bitmap.Render(drawingVisual);

    return bitmap;
}