保存位图移动画布
本文关键字:动画 移动 位图 保存 | 更新日期: 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>
然后,您可以完全取消对Measure
和Arrange
的呼叫。但是,请确保仍然将子Canvas
传递给RenderTargetBitmap.Render
方法,而不是父Grid
。