【发布时间】:2014-02-20 02:56:26
【问题描述】:
所以我试图在 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);
}
【问题讨论】:
-
为什么要创建 MemoryStream?创建 FileStream 并直接保存编码器。
-
如果可见画布区域外有元素:stackoverflow.com/questions/67472818/…
标签: c# wpf png rendertargetbitmap