我有两层。第一层是图像控制。它的来源是位图图像。这是背景图层。第二个是前层,是一个画布,我可以在其上绘制几何对象(如直线,折线,矩形等),画布的背景是透明的。 如何合并这两个图层并使用WPF将其另存为图像。
答案 0 :(得分:0)
“层”是什么意思?只有两个控件位于网格的同一个单元格中?如果你有两个“图层”坐在另一个容器(如网格,甚至窗口),那么你可以使用RenderTargetBitmap与该容器来获取你的图像。我有一些细节,taking WPF "Screenshots" on my blog.
的扩展方法答案 1 :(得分:0)
您可以获取放置了图像控件和画布的父面板的位图。
如何在WPF中获取UIElement的位图代码。
RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(parentPanel);
答案 2 :(得分:0)
使用类似的东西,从画布调用此方法(这是画布) -
private Bitmap ImageGenerator()
{
var transform = this.LayoutTransform;
// Call UpdateLayout to make sure changes all changes
// while drawing objects on canvas are reflected
var layer = AdornerLayer.GetAdornerLayer(this);
layer?.UpdateLayout();
// Get the size of canvas
var size = new System.Windows.Size(this.ActualWidth, this.ActualHeight);
// Measure and arrange the surface
// VERY IMPORTANT
this.Measure(size);
this.Arrange(new Rect(RenderSize));
RenderTargetBitmap renderBitmap =
new RenderTargetBitmap(
(int)this.ActualWidth,
(int)this.ActualHeight,
96d,
96d,
PixelFormats.Pbgra32);
renderBitmap.Render(this);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
// push the rendered bitmap to it
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
var stream = new MemoryStream();
encoder.Save(stream);
this.LayoutTransform = transform;
return new Bitmap(stream);
}