在 WPF C# 中保存图像 mscorlib.dll 时出现错误 System.UnauthorizedAccessException
Saving Image in WPF C# with an error System.UnauthorizedAccessException occurred in mscorlib.dll
我正在创建图表设计器的 WPF 应用程序,它只保存为 .xml,我还想将其导出为 png。
我有这个代码。
public static void ExportToPng(UIElement target, string ImagePath)
{
// Prepare target-layout
Size size = target.RenderSize;
target.Measure(size);
target.Arrange(new Rect(size));
// Render diagram to bitmap
RenderTargetBitmap renderBitmap =
new RenderTargetBitmap(
(int)size.Width,
(int)size.Height,
96, 96,
PixelFormats.Pbgra32);
renderBitmap.Render(target);
// Convert bitmap to png
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
我搜索了代码,它说:
最后一步是将图像保存到磁盘(或任何您喜欢的地方)。 PngBitmapEncoder 提供了保存到流的可能性。在本教程中,我们将向其传递一个 StreamWriter,以将图像保存到我们传递给该方法的路径。将以下代码添加到方法 ExportToPng:
using (FileStream fileStream = new FileStream(ImagePath, FileMode.Create))
{
encoder.Save(fileStream);
}
}
}
我想问问这个fileStream是否真的需要。对不起,我只是 c# 和 WPF 的新手。
我收录也是因为它是这么说的,最后一部分是这样的:
这样你就完成了图表导出方法。现在如何以及在哪里可以调用它?我先回答第一个问题。你可以这样称呼它:
SelectionService.ClearSelection(); // Unselect DesignerItems
DiagramDesignerExporter.ExportToPng(<DesignerCanvas-Object>, "<YourFullFilePath>");
它还说:
您想调用 ExportToPng 方法的位置在很大程度上取决于您构建的应用程序类型。如果您只是增强原始的 WPF Diagram Designer,那么您很可能会向 Ribbon-Toolbar 添加一个新按钮并向文件 DesignerCanvas.Commands.cs 添加一个新方法。如果这样做,您可以像这样简单地调用该方法:
DiagramDesignerExporter.ExportToPng(this, <YourFullFilePath>);
我也想问一下我要放什么到.我认为这是我笔记本电脑上的一个地方。所以我这样称呼它:
DiagramDesignerExporter.ExportToPng(this, "C:/Users/Sony/Pictures");
我运行它,我有这样的错误:
An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll
Additional information: Access to the path 'C:\Users\Sony\Pictures' is denied.
我试着这样称呼它:
DiagramDesignerExporter.ExportToPng(this, "C:/Users/Sony/Pictures");
但它无法正常工作。我希望有人可以帮助我。谢谢。
您必须指定包括文件名的完整路径,而不仅仅是文件夹路径:
DiagramDesignerExporter.ExportToPng(this, @"C:\Users\Sony\Pictures\Image1.png");
我正在创建图表设计器的 WPF 应用程序,它只保存为 .xml,我还想将其导出为 png。
我有这个代码。
public static void ExportToPng(UIElement target, string ImagePath)
{
// Prepare target-layout
Size size = target.RenderSize;
target.Measure(size);
target.Arrange(new Rect(size));
// Render diagram to bitmap
RenderTargetBitmap renderBitmap =
new RenderTargetBitmap(
(int)size.Width,
(int)size.Height,
96, 96,
PixelFormats.Pbgra32);
renderBitmap.Render(target);
// Convert bitmap to png
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
我搜索了代码,它说:
最后一步是将图像保存到磁盘(或任何您喜欢的地方)。 PngBitmapEncoder 提供了保存到流的可能性。在本教程中,我们将向其传递一个 StreamWriter,以将图像保存到我们传递给该方法的路径。将以下代码添加到方法 ExportToPng:
using (FileStream fileStream = new FileStream(ImagePath, FileMode.Create))
{
encoder.Save(fileStream);
}
}
}
我想问问这个fileStream是否真的需要。对不起,我只是 c# 和 WPF 的新手。
我收录也是因为它是这么说的,最后一部分是这样的:
这样你就完成了图表导出方法。现在如何以及在哪里可以调用它?我先回答第一个问题。你可以这样称呼它:
SelectionService.ClearSelection(); // Unselect DesignerItems
DiagramDesignerExporter.ExportToPng(&amp;lt;DesignerCanvas-Object&amp;gt;, &amp;quot;&amp;lt;YourFullFilePath&amp;gt;&amp;quot;);
它还说:
您想调用 ExportToPng 方法的位置在很大程度上取决于您构建的应用程序类型。如果您只是增强原始的 WPF Diagram Designer,那么您很可能会向 Ribbon-Toolbar 添加一个新按钮并向文件 DesignerCanvas.Commands.cs 添加一个新方法。如果这样做,您可以像这样简单地调用该方法:
DiagramDesignerExporter.ExportToPng(this, <YourFullFilePath>);
我也想问一下我要放什么到.我认为这是我笔记本电脑上的一个地方。所以我这样称呼它:
DiagramDesignerExporter.ExportToPng(this, "C:/Users/Sony/Pictures");
我运行它,我有这样的错误:
An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll
Additional information: Access to the path 'C:\Users\Sony\Pictures' is denied.
我试着这样称呼它:
DiagramDesignerExporter.ExportToPng(this, "C:/Users/Sony/Pictures");
但它无法正常工作。我希望有人可以帮助我。谢谢。
您必须指定包括文件名的完整路径,而不仅仅是文件夹路径:
DiagramDesignerExporter.ExportToPng(this, @"C:\Users\Sony\Pictures\Image1.png");