我有多个函数正在返回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并在其上绘制所有位图图像。但它的方式非常复杂。有没有更好的方法呢?
答案 0 :(得分: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;
}