在WPF C#中保存图像,并在mscorlib.dll中发生错误System.UnauthorizedAccessException

时间:2015-11-16 06:09:45

标签: c# wpf bitmap save filestream

我正在创建一个图表设计器的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图表设计器,那么您很可能在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");

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

1 个答案:

答案 0 :(得分:0)

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

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