我試圖從服務返回的字節數組中創建BitmapImage
。從字節數組創建BitmapImage
我的代碼是:
using (sc = new ServiceClient())
{
using (MemoryStream ms = new MemoryStream(sc.GetImage()))
{
Display = new BitmapImage();
Display.BeginInit();
Display.StreamSource = ms;
Display.EndInit();
}
}
然而,一個例外是在EndInit
方法拋出。它說Object reference not set to an instance of an object.
。
看來,Uri是空的,它會導致問題。不幸的是,我自己找不到解決方案。
按照[文件](http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.streamsource.aspx),你還可以指派一個值到'Display.UriSource'?如果是這樣,它會忽略'StreamSource'。另外,你有'CacheOption'屬性設置爲'BitmapCacheOption.OnLoad'嗎?編輯:此外,它似乎是'顯示'是一個成員(字段/屬性),是否有可能你有一個線程問題在這裏取代/更改'顯示'當你使用它? –
@ChrisSinclair,我沒有分配給UriSource一個優點。我只是檢查了一個堆棧跟蹤,在我看來,由於這個屬性而拋出了一個空指針異常。這只是一個猜測。顯示器確實是一個屬性,它綁定到我的XAML佈局。所以,基本上我想從WCF服務獲取圖像,然後在WPF窗口中顯示它。除此綁定外,我沒有可能導致線程問題的代碼。 –
你可以嘗試將'CacheOption'屬性設置爲'BitmapCacheOption.OnLoad'嗎?否則,從我所瞭解的情況來看,它將懶洋洋地嘗試訪問可能在讀取它時關閉的流。根據評論[這裏](http://stackoverflow.com/a/2250851/1269654)一定要在'BeginInit()'之後設置它。編輯:即:'Display = new BitmapImage(); Display.BeginInit(); Display.CacheMode = BitmapCacheOption.OnLoad; Display.StreamSource = ms; Display.EndInit();' –