Csharp/C#教程:将canvas保存到png C#wpf分享


将canvas保存到png C#wpf

所以我试图在WPF C#中拍摄我的canvas快照,以便我可以将其保存为png。 目前图像保存不正确,因为它包括左边距和上边距。

这就是我所拥有的:

为canvas大小创建一个矩形。 如果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); } 

用这些线替换前四行

  Rect bounds = VisualTreeHelper.GetDescendantBounds(canvas); double dpi = 96d; RenderTargetBitmap rtb = new RenderTargetBitmap((int)bounds.Width, (int)bounds.Height, dpi, dpi, System.Windows.Media.PixelFormats.Default); DrawingVisual dv = new DrawingVisual(); using (DrawingContext dc = dv.RenderOpen()) { VisualBrush vb = new VisualBrush(canvas); dc.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size)); } rtb.Render(dv); 

我已经按照这篇文章https://mcleodsean.wordpress.com/2008/10/07/bitmap-snapshots-of-wpf-visuals/ (更多解释)并且能够保存canvas而没有边距。

上述就是C#学习教程:将canvas保存到png C#wpf分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/956276.html

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

精彩推荐