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

有帮助吗?

解决方案

你说的“层”是什么意思?就在两个控件在网格中的同一个小区坐?如果你有两个“层”坐在另一个容器(如网格,甚至是窗口),那么你可以使用RenderTargetBitmap与容器让你的形象。我有一些细节,采取WPF“屏幕截图”的扩展方法上我的博客。

其他提示

您可以得到你已经把你的图像控制和帆布你父面板的位图。

是怎样的代码来获得UIElement的位图中WPF。

 RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(parentPanel);

使用类似的东西,从你的画布调用此方法(这是帆布) -

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);
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top