[英]Saving WPF Canvas to file without losing quality (Without using Bitmap as intermediary)
[英]Saving Bitmap Moves The Canvas
我正在嘗試將畫布圖形另存為位圖。 該代碼可以正常工作,但是一旦保存了圖形,畫布就會移動到父應用程序的左上方。 我的代碼如下:
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.Arrange。 有人照亮了嗎?
謝謝。
原因是您沒有在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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.