2015-06-26 2 views
0

Для разработки Windows Phone 8 все, что я прочитал, говорит о том, что вы должны установить поток в качестве источника битмапирования, чтобы преобразовать массив byte [] в BitmapImage. Когда я реализую это, хотя, я получаю сообщение об ошибке по адресу:Ошибка при установке MemoryStream в качестве источника BitMapImage

bitmapImage.SetSource(stream); 

Ошибка:

An exception of type 'System.Exception' occurred in System.Windows.ni.dll 
but was not handled in user code 

Additional information: The component cannot be found. (Exception from 
HRESULT: 0x88982F50) 

фрагмент кода:

byte[] bytes = value as byte[]; 
MemoryStream stream = new MemoryStream(bytes, 0, bytes.Length); 
BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.SetSource(stream); 
+0

https://social.msdn.microsoft.com/Forums/windowsapps/en-US/6590eb57-98cf-4b9f-b2d8-6e7aae9c00a2/cant-convert-byte-to-bitmapimage-component-cannot-be-found -error? forum = winappswithcsharp – Jashaszun

ответ

1

Массив вы сохранили в bytes не является допустимым изображением. Вам нужно вернуться к тому месту, где заполняется value и выяснить, почему он не заполняется массивом байтов для изображения.

+0

Мое приложение делает снимок, отправляет его в службу wcf и отправляет его в базу данных sql-сервера, откуда я могу получить доступ к ней позже с другой страницы приложения. Вы бы не узнали, вызывает ли эта строка кода это: byte [] theBytes = Encoding.UTF8.GetBytes (upload); Вот как я превращаю изображение в байты в свою службу wcf, чтобы добавить его в базу данных sql-сервера. – NathanVigs

+0

Да, это источник вашей проблемы, вы не можете отправлять произвольные данные с помощью методов Encoding.'. Если вам нужно преобразовать его в строку, вы можете использовать ['Convert.ToBase64String'] (https://msdn.microsoft.com/en-us/library/dhx0d524 (v = vs.110) .aspx) и [' Convert.FromBase64String'] (https://msdn.microsoft.com/en-us/library/system.convert.frombase64string (v = vs.110) .aspx). Однако лучше всего сделать, чтобы ваша таблица sql использовала 'varbinary' вместо' varchar', тогда вам никогда не понадобилось преобразовывать ее в строку. –

+0

Ты мужчина! Я принял ваш совет и превратил HttpPostedFile в массив byte [], и проблема окончательно решена. – NathanVigs

1

Часто странные ошибки, как это вызвано неспособностью установить поток в исходное положение. Кроме того, хорошей практикой является обертывание одноразовых объектов в операторе using.

Решает проблему?

var bytes = value as byte[]; 
using(var stream = new MemoryStream(bytes, 0, bytes.Length)) 
{ 
    //set this to the beginning of the stream 
    stream.Position = 0; 
    var bitmapImage = new BitmapImage(); 
    bitmapImage.SetSource(stream); 
} 
+0

К сожалению, он дает ту же ошибку на том же месте. – NathanVigs

Смежные вопросы