1

私は2つのレイヤーを持っています。最初のレイヤーはイメージ コントロールです。そのソースは Bitmap Image です。そしてこれが背景レイヤーです。前面レイヤーである 2 つ目は、ジオメトリ オブジェクト (線、ポリライン、四角形など) を描画できるキャンバスであり、キャンバスの背景は透明です。これらの 2 つのレイヤーをマージして、WPF を使用して画像として保存するにはどうすればよいですか。

4

3 に答える 3

0

画像コントロールとキャンバスを配置した親パネルのビットマップを取得できます。

WPFでUIElementのビットマップを取得するコードはどのようになっていますか。

 RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(parentPanel);
于 2009-10-08T09:36:02.180 に答える
0

「レイヤー」とは何を意味しますか?グリッドの同じセルに 2 つのコントロールしかありませんか? 両方の「レイヤー」が別のコンテナー (グリッドやウィンドウなど) にある場合は、そのコンテナーで RenderTargetBitmap を使用して画像を取得できます。私のブログには、WPFの「スクリーンショット」を撮るための拡張メソッドがあります。

于 2009-10-08T09:16:19.147 に答える
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 に答える