2015-11-16 15 views
0

我正在創建一個圖表設計器的WPF應用程序,它只保存爲.xml,我還想將其導出爲png。在WPF中保存圖片C#出現錯誤System.UnauthorizedAccessException發生在mscorlib.dll中

我有這段代碼。

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"); 

,但它不是運行。我希望有人能幫助我解決這個問題。謝謝。

+0

是。除了索尼,我沒有其他用戶。 –

回答

0

您必須指定一個完整路徑,包括文件名,不僅是一個文件夾路徑:

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

謝謝你的回覆,但它不起作用。按鈕不起作用,你有另外一個建議嗎?謝謝 –

+0

我現在明白了。謝謝:) @Clemens –

+0

但是,它只更新圖像,當我嘗試做一個新的。有沒有解決方案覆蓋文件名,如果它已經存在? @Clemens –

相關問題