【问题标题】:Get System.Drawing.Bitmap of a WPF Area using VisualBrush使用 VisualBrush 获取 WPF 区域的 System.Drawing.Bitmap
【发布时间】:2011-07-13 08:24:31
【问题描述】:

重点是,我需要转换为 System.Drawing.Bitmap (.Net Framework 2.0) 以获取 WPF 网格的单帧及其内容。

我读到了VisualBrushDrawingBrush,但我无法想象它应该如何工作。

我可以成功地将任何 WPF BitmapSource 转换为我的 System.Drawing.Bitmap。但是如何从我的网格接收BitmapSource

谢谢

【问题讨论】:

    标签: c# wpf drawing bitmapsource visualbrush


    【解决方案1】:

    要将Visual 转换为BitmapSource,您可以使用RenderTargetBitmapVisualBrushDrawingVisual

    public BitmapSource ConvertToBitmapSource(UIElement element)
    {
        var target = new RenderTargetBitmap((int)(element.RenderSize.Width), (int)(element.RenderSize.Height), 96, 96, PixelFormats.Pbgra32);
        var brush = new VisualBrush(element);
    
        var visual = new DrawingVisual();
        var drawingContext = visual.RenderOpen();
    
    
        drawingContext.DrawRectangle(brush, null, new Rect(new Point(0, 0),
            new Point(element.RenderSize.Width, element.RenderSize.Height)));
    
        drawingContext.Close();
    
        target.Render(visual);
    
        return target;
    }   
    

    【讨论】:

    • 当控件的大小大于 2048x2048 时,这将无法正常工作。图片很模糊。 MSDN 关于BitmapCache:“缓存在硬件加速不可用时起作用。在这种情况下,位图在软件中呈现,最大位图尺寸为 2048 x 2048。”有谁知道如何将缓存增加到所需的大小?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2022-07-25
    • 2010-09-10
    • 2010-11-10
    相关资源
    最近更新 更多