在 WPF C# 中保存图像时出现错误 System.UnauthorizedAccessException 在 mscorlib.dll 中发生

Posted

技术标签:

【中文标题】在 WPF C# 中保存图像时出现错误 System.UnauthorizedAccessException 在 mscorlib.dll 中发生【英文标题】:Saving Image in WPF C# with an error System.UnauthorizedAccessException occurred in mscorlib.dll 【发布时间】:2015-11-16 06:09:44 【问题描述】:

我正在创建一个图表设计器的 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 图表设计器,那么您很可能会向功能区工具栏添加一个新按钮,并将一个新方法添加到文件 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");

但它不起作用。我希望有人可以帮助我。谢谢。

【问题讨论】:

是的。除了 Sony,我没有其他用户。 【参考方案1】:

您必须指定包含文件名的完整路径,而不仅仅是文件夹路径:

DiagramDesignerExporter.ExportToPng(this, @"C:\Users\Sony\Pictures\Image1.png");

【讨论】:

感谢您的回复,但它不起作用。按钮不起作用,您还有其他建议吗?谢谢 我现在明白了。谢谢:) @Clemens 但是,它只会在我尝试制作新图像时更新图像。如果文件名已经存在,是否有解决方案来覆盖文件名? @克莱门斯 您似乎在使用FileMode.Create。这应该已经允许覆盖现有文件。 它没有创建一个新的。可能是因为文件名。我搜索了类似这样的 DiagramDesignerExporter.ExportToPng(this, string.Format(@"C:\Users\Sony\Pictures\0.png", filename));但它只保存为没有文件名的图像。 @克莱门斯

以上是关于在 WPF C# 中保存图像时出现错误 System.UnauthorizedAccessException 在 mscorlib.dll 中发生的主要内容,如果未能解决你的问题,请参考以下文章

保存捕获的图像时出现 JavaCV 错误

在 SQliteDatabase 中保存图像时出现 OutOfMemoryError

使用 SharpDX 在 WPF 中滚动图像时出现生涩动画

使用 UIImageWriteToSavedPhotosAlbum 保存图像时出现无法识别的选择器错误

尝试保存图像时出现 Android 运行时错误

C# WPF 在单击重复操作时出现气球提示问题