[英]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.