如何在c# wpf中保存画布控件在特定位置(在视图框中)为png格式
本文关键字:格式 定位 位置 视图 png wpf 保存 布控件 控件 | 更新日期: 2023-09-27 18:11:02
我想用WPF开发一个。net应用程序。
最后应该有一个Viewbox或类似的东西,这个Viewbox应该包含一个画布,在这个画布中可以有各种各样的东西,如填充矩形,椭圆等(如绘图应用程序)。油漆)。
现在我想实现将Canvas的内容保存为PNG格式的功能。我尝试将画布渲染为RenderTargetBitmap,然后保存它。
这里的问题是,我不能设置具体的坐标,我唯一能设置的是尺寸(画布宽度&高度)的RenderTargetBitmap,但它会开始渲染大小从(0|0)开始,我的画布元素开始在其他地方。有什么解决办法吗?
下一个问题是,应该有可能将图片添加为根画布的子元素,但我怎么能关心质量,并且Viewbox中的所有内容都是打印的?
非常感谢!
------ EDIT ------
我想我有一个解决方案:
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);
}
}
为我保存完整的画布
在特定位置-
我想你应该用边距