2010-12-14 39 views
0

在我的應用中,我想顯示一些圖片(我需要將它們存儲在列表中)。我有打開它們的問題。首先,我製作了一個目錄圖片(使用VS)。接下來我將圖片加載到這個文件夾中(也在VS中)。 我想打開其中一個喜歡這裏: http://msdn.microsoft.com/en-us/library/aa970062.aspx無法在WPF應用中打開圖像

Stream imageStreamSource = new FileStream("Images\bulbOff.png", FileMode.Open, FileAccess.Read, FileShare.Read); 
PngBitmapDecoder decoder = new PngBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); 
BitmapSource bitmapSource = decoder.Frames[0]; 

然後試圖運行該程序,我得到:

XamlParseException 

幾乎沒有任何信息。 確定第一行導致問題,因爲只有當我刪除它時,問題纔會消失。

我試圖做到這一點也很喜歡:

Uri myUri = new Uri("Images\bulbOff.png", UriKind.RelativeOrAbsolute); 
PngBitmapDecoder decoder2 = new PngBitmapDecoder(myUri, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); 
BitmapSource bitmapSource2 = decoder2.Frames[0]; 

具有相同的結果。 我也嘗試將圖像複製到應用程序的主文件夾(在SolutionView中)。當我試圖獲得「\ bulbOff.png」時,結果是一樣的。 當我試圖讓「bulbOff.png」我

XamlParseException 

一遍,但也有一些信息 - 有跡象表明路徑可能是錯誤的。

+0

爲什麼加載圖像會引發XamlParseException?你是否100%確定異常與加載圖像有關? – 2010-12-14 20:13:58

+0

移動該代碼,以便在控件實例化時不會發生錯誤。構造過程中拋出的任何異常(間接從XAML調用)都將被捕獲,並引發XamlParseException。但是,InnerException(或者可能是幾個InnerException級別)應該揭示真正的錯誤。 – 2010-12-15 00:47:00

+0

@Gerardo正如我寫的,我嘗試從最後一行開始逐行刪除代碼。並且在刪除第一行之後,異常被停止引發(在這兩個示例中它都包含文件的路徑)。 – rideronthestorm 2010-12-15 01:21:00

回答

0

如果你想提供一個BitmapImage ...

BitmapImage image = new BitmapImage(); 
image.BeginInit(); 
image.UriSource = new Uri(@"..\Images\DocumentAccess_16x16.png", UriKind.Relative); 
image.EndInit(); 

...如果照片是你的項目中的文件夾。

+0

1.據我所知BitmapImage只是抽象類ImageSource的實現。 2.在這兩個例子中,您只使用BitmapImage,那麼提供ImageSource是什麼意思? – rideronthestorm 2010-12-15 00:27:10

+0

@rideronthestorm你是正確的ImageSource是更高級別的類型,相應地編輯,給我的BitmapImage路線去我知道它的工作原理......它現在正在代碼 – 2010-12-15 00:40:24

+0

不是一個PNG圖像必須被解碼? '@'代表什麼,爲什麼在你輸入'../'的路徑的開始部分(文件樹中的上一級)? – rideronthestorm 2010-12-15 01:24:48

0

嘗試將您的圖像和代碼更改爲jpg擴展名。認真。