如何在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);
        }
    }

为我保存完整的画布

如何在c# wpf中保存画布控件在特定位置(在视图框中)为png格式

在特定位置-

我想你应该用边距