Я пытаюсь создать 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'? EDIT: Кроме того, похоже, что 'Display' является членом (поле/свойство), возможно, у вас есть проблема с потоками, которая заменяет/изменяет' Display', когда вы работаете с ней? –
@ChrisSinclair, я не назначаю vaule UriSource. Я просто проверил трассировку стека, и мне показалось, что из-за этого атрибута выбрано исключение нулевого указателя. Это было просто предположение. Дисплей - это свойство, которое связано с моим макетом XAML. Поэтому, в основном, я хотел бы получить изображение из службы WCF, а затем отобразить его в окне WPF. Помимо этой привязки, у меня нет кода, который может вызвать проблему с потоками. –
Можете ли вы попробовать установить его свойство 'CacheOption' в' BitmapCacheOption.OnLoad'? В противном случае, насколько я понимаю, он лениво попытается получить доступ к потоку, который может быть закрыт к моменту его чтения. Согласно комментариям [здесь] (http://stackoverflow.com/a/2250851/1269654) обязательно установите его после 'BeginInit()'. EDIT: это: 'Display = new BitmapImage(); Display.BeginInit(); Display.CacheMode = BitmapCacheOption.OnLoad; Display.StreamSource = ms; Display.EndInit(); ' –