我正在尝试在WPF C#中对我的画布进行快照,以便将其保存为png。目前保存的图像不正确,因为它包括左侧和顶部边距。
这是我的代码:
创建一个大小与画布相同的矩形。如果将canvas.Margin.Left和Top设置为0,则保存的图像大小正确,但仍会出现偏移,因此会截断底部和右侧边缘。如果设置Margin.Left和Top,则仍会发生偏移,但整个图像会被保存,但大小不对(margin.Left + ActualWidth而不是只有ActualWidth)。
Rect rect = new Rect(canvas.Margin.Left, canvas.Margin.Top, canvas.ActualWidth, canvas.ActualHeight);
double dpi = 96d;
RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, (int)rect.Bottom, dpi, dpi, System.Windows.Media.PixelFormats.Default);
rtb.Render(canvas);
BitmapEncoder pngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));
try
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
pngEncoder.Save(ms);
ms.Close();
System.IO.File.WriteAllBytes(filename, ms.ToArray());
}
catch (Exception err)
{
MessageBox.Show(err.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right + 1, (int)rect.Bottom + 1, dpi, dpi, System.Windows.Media.PixelFormats.Default);
- SourceSeeker