保存位图移动画布

本文关键字:动画 移动 位图 保存 | 更新日期: 2023-09-27 18:22:35

我正在尝试将画布图形保存为位图。代码运行良好,但是保存图形后,画布将移动到父应用程序的左上角。我的代码如下:

public void SaveBitmap()
    {
        Size size = new Size(canvas.ActualWidth, canvas.ActualHeight);
        canvas.Measure(size);
        canvas.Arrange(new Rect(size));
        RenderTargetBitmap renderBitmap =
            new RenderTargetBitmap(
                (int)size.Width,
                (int)size.Height,
                96d,
                96d,
                PixelFormats.Pbgra32);
        renderBitmap.Render(canvas);
        using (FileStream outStream = new FileStream("C:''Users''Darren''Desktop''test.bmp", FileMode.Create))
        {
            BmpBitmapEncoder encoder = new BmpBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
            encoder.Save(outStream);
        }

    }

导致问题的行是canvas。安排有人发光吗?

谢谢。

保存位图移动画布

原因是您没有在Rect构造函数中指定任何位置,因此默认为(0,0)的位置。

我对使用RenderTargetBitmap的建议是,将您的Canvas放置在Grid中,然后在此外部Grid上执行UI所需的任何明确定位,让您的内部Canvas自然地在此父Grid中占据(0,0)的位置。

例如,如果您有:

<Window>
    <Canvas Left="10" Top="30" />
</Window>

更改为:

<Window>
    <Grid Left="10" Top="30">
        <Canvas />
    </Grid>
</Window>

然后,您可以完全取消对MeasureArrange的呼叫。但是,请确保仍然将子Canvas传递给RenderTargetBitmap.Render方法,而不是父Grid