簡體   English   中英

如何在C#WPF中將特定位置(在視圖框中)的Canvas-Control保存到png?

[英]How to save Canvas-Control at specific position (in a viewbox) to a png in c# wpf?

我想用WPF開發一個.NET應用程序。

最后,應該有一個Viewbox或類似的東西,該Viewbox應該包含一個畫布,並且在該畫布中可以有各種東西,例如實心矩形,橢圓等(例如繪圖應用程序,例如paint)。

現在,我想實現將Canvas的內容保存到PNG的功能。 我嘗試將Canvas渲染到RenderTargetBitmap,然后保存它。

這里的問題是我無法設置特定的坐標,我唯一可以設置的是RenderTargetBitmap的大小(畫布寬度和高度),但是它將開始從(0 | 0)開始渲染我的畫布的大小元素從其他地方開始。 為此有一些工作嗎?

下一個問題是,應該有可能添加圖片作為根Canvas的子元素,但是我如何關心質量以及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);
        }
    }

這為我保存了完整的畫布

在特定位置-

我認為在您的情況下使用邊距。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM