1

我有两层。第一层是图像控制。它的来源是位图图像。这是背景层。第二个,即最前面的图层是一个画布,我可以在上面绘制几何对象(如直线、折线、矩形等),并且画布的背景是透明的。如何合并这两个图层并使用 WPF 将其保存为图像。

4

3 回答 3

0

“层”是什么意思?只有两个控件位于网格的同一个单元格中?如果您将两个“层”都放在另一个容器中(例如网格,甚至是窗口),那么您可以将 RenderTargetBitmap 与该容器一起使用来获取您的图像。我有一些细节,一种在我的博客上获取 WPF“屏幕截图”的扩展方法。

于 2009-10-08T09:16:19.147 回答
0

您可以获得放置图像控件和画布的父面板的位图。

在 WPF 中获取 UIElement 位图的代码如何。

 RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(parentPanel);
于 2009-10-08T09:36:02.180 回答
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);
    }
于 2016-11-10T06:48:09.090 回答