Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将特定位置(在viewbox中)的画布控件保存为c#wpf中的png?_C#_Wpf_Save_Png_Render - Fatal编程技术网

如何将特定位置(在viewbox中)的画布控件保存为c#wpf中的png?

如何将特定位置(在viewbox中)的画布控件保存为c#wpf中的png?,c#,wpf,save,png,render,C#,Wpf,Save,Png,Render,我想用WPF开发一个.NET应用程序 最后应该有一个Viewbox或类似的东西,这个Viewbox应该包含一个画布,在这个画布中可以有各种各样的东西,比如填充矩形、椭圆等(比如绘画应用程序,比如绘画) 现在我想实现将画布内容保存到PNG的功能。我尝试将画布渲染为RenderTargetBitmap,然后保存它 这里的问题是我无法设置特定的坐标,唯一可以设置的是RenderTargetBitmap的大小(画布宽度和高度),但它将从画布元素从其他地方开始的(0 | 0)开始渲染大小。有什么工作要做吗

我想用WPF开发一个.NET应用程序

最后应该有一个Viewbox或类似的东西,这个Viewbox应该包含一个画布,在这个画布中可以有各种各样的东西,比如填充矩形、椭圆等(比如绘画应用程序,比如绘画)

现在我想实现将画布内容保存到PNG的功能。我尝试将画布渲染为RenderTargetBitmap,然后保存它

这里的问题是我无法设置特定的坐标,唯一可以设置的是RenderTargetBitmap的大小(画布宽度和高度),但它将从画布元素从其他地方开始的(0 | 0)开始渲染大小。有什么工作要做吗

下一个问题是,应该可以将图片添加为根画布的子元素,但我怎么能关心质量以及Viewbox中的所有内容都已打印

多谢各位!



------编辑------

我想我有一个解决办法:

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);
        }
    }

这将在特定位置为我保存整个画布


我想在您的情况下使用页边距。

这可以与页边距一起存档吗?这是一张图片,我想保存蓝色画布,但结果图像将包含红色方块