0

我有多个返回 System.Windows.Media.DrawingVisual 对象的函数。我需要将所有 DrawingVisual 对象组合成一个图像。

private System.Windows.Media.DrawingVisual Shape1()
{
    DrawingVisual dv = new DrawingVisual();
    using (DrawingContext dc = dv.RenderOpen())
    {
        ////--- draw shapes on 'dc'
    }
    return dv;
}

private System.Windows.Media.DrawingVisual Shape2()
{
    DrawingVisual dv = new DrawingVisual();
    using (DrawingContext dc = dv.RenderOpen())
    {
        ////--- draw shapes on 'dc'
    }
    return dv;
}

在我的函数中,我需要组合返回的对象,如下所示

private void Combine()
{
    System.Windows.Media.DrawingVisual s1 = Shape1();
    System.Windows.Media.DrawingVisual s2 = Shape2();

    //--- here i need to draw the s1 & s2 into an image and display on screen.
}

另一种方法是将所有 DrawingVisuals 保存到单独的 BitmapSource 对象中,然后再创建一个 DrawingVisual 并在其上绘制所有位图图像。但它的方式非常复杂。有没有更好的方法来做到这一点?

4

1 回答 1

0

重构(提取方法)

在“dc”上绘制形状

您的形状返回方法的一部分到Action<DrawingContext>.

然后使用鞋底 DrawingContext来调用所有这些操作,如下所示。生成一个ImageSource分配给您的Image控件。

public static BitmapSource CreateBitmap(int width, int height, double dpi,
    IEnumerable<Action<DrawingContext>> renderActions)
{
    DrawingVisual drawingVisual = new DrawingVisual();

    using (DrawingContext drawingContext = drawingVisual.RenderOpen())
    {
        foreach (var render in renderActions)
            render(drawingContext);
    }

    RenderTargetBitmap bitmap = new RenderTargetBitmap(
        width, height, dpi, dpi, PixelFormats.Default);

    bitmap.Render(drawingVisual);

    return bitmap;
}
于 2015-12-23T15:39:58.997 回答