如何将特定位置(在viewbox中)的画布控件保存为c#wpf中的png?
我想用WPF开发一个.NET应用程序 最后应该有一个Viewbox或类似的东西,这个Viewbox应该包含一个画布,在这个画布中可以有各种各样的东西,比如填充矩形、椭圆等(比如绘画应用程序,比如绘画) 现在我想实现将画布内容保存到PNG的功能。我尝试将画布渲染为RenderTargetBitmap,然后保存它 这里的问题是我无法设置特定的坐标,唯一可以设置的是RenderTargetBitmap的大小(画布宽度和高度),但它将从画布元素从其他地方开始的(0 | 0)开始渲染大小。有什么工作要做吗 下一个问题是,应该可以将图片添加为根画布的子元素,但我怎么能关心质量以及Viewbox中的所有内容都已打印 多谢各位!如何将特定位置(在viewbox中)的画布控件保存为c#wpf中的png?,c#,wpf,save,png,render,C#,Wpf,Save,Png,Render,我想用WPF开发一个.NET应用程序 最后应该有一个Viewbox或类似的东西,这个Viewbox应该包含一个画布,在这个画布中可以有各种各样的东西,比如填充矩形、椭圆等(比如绘画应用程序,比如绘画) 现在我想实现将画布内容保存到PNG的功能。我尝试将画布渲染为RenderTargetBitmap,然后保存它 这里的问题是我无法设置特定的坐标,唯一可以设置的是RenderTargetBitmap的大小(画布宽度和高度),但它将从画布元素从其他地方开始的(0 | 0)开始渲染大小。有什么工作要做吗
------编辑------ 我想我有一个解决办法:
void SaveUsingEncoder(Canvas myCanvas, string fileName)
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
RenderTargetBitmap bitmap = new RenderTargetBitmap(
(int)myCanvas.ActualWidth,
(int)myCanvas.ActualHeight,
96,
96,
PixelFormats.Pbgra32);
Rect bounds = VisualTreeHelper.GetDescendantBounds(myCanvas);
Console.WriteLine(bounds.X + "|" + bounds.Y + " " + bounds.Width + "|" + bounds.Height);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext ctx = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(myCanvas);
ctx.DrawRectangle(vb, null, new Rect(bounds.Location, bounds.Size));
}
bitmap.Render(dv);
BitmapFrame frame = BitmapFrame.Create(bitmap);
encoder.Frames.Add(frame);
using (var stream = File.Create(fileName))
{
encoder.Save(stream);
}
}
这将在特定位置为我保存整个画布
我想在您的情况下使用页边距。这可以与页边距一起存档吗?这是一张图片,我想保存蓝色画布,但结果图像将包含红色方块