2016-08-19 4 views
0

У меня есть изображения, сделанные из мобильного приложения, которое мне нужно преобразовать в BitmapImage. Все сделанные снимки преобразуются в byte[] и хранятся в SQL Server.Невозможно преобразовать байт [] в BitmapImage

Затем я хочу получить это изображение и отобразить его в элементе управления Image в WPF. Вот мое преобразование из байта [] в BitmapImage:

private static BitmapImage LoadImage(byte[] imageData) 
{ 
    if (imageData == null || imageData.Length == 0) return null; 
    var image = new BitmapImage(); 
    using (var mem = new MemoryStream(imageData)) 
    { 
     mem.Position = 0; 
     image.BeginInit(); 
     image.CreateOptions = BitmapCreateOptions.PreservePixelFormat; 
     image.CacheOption = BitmapCacheOption.OnLoad; 
     image.UriSource = null; 
     image.StreamSource = mem; 
     image.EndInit(); //Error exception here. 
    } 
    image.Freeze(); 
    return image; 
} 

Я получаю сообщение об ошибке на EndInit() линии, как показано выше.

Никакой компонент изображения, подходящий для завершения этой операции, не найден.

я вызываю метод LoadImage() и так:

MyCollection.Add(new ImageItems 
{ 
    Id = image.Id, 
    ImageData = LoadImage(image.TruckImg), 
    DateTaken = image.DateTaken 
}); 

Дело в том, что я знаю, что байты [] image.TruckImg содержит действительное изображение, потому что, когда я придаю, что точно такое же изображение на электронную почту, изображение отображается в Gmail правильно.

электронной почты код Привязанность:

MemoryStream memoryStream = new MemoryStream(image.TruckImg); 
mail.Attachments.Add(new Attachment(memoryStream, filename, MediaTypeNames.Image.Jpeg)); 

Может кто-нибудь сказать мне, как исправить мою ошибку выше? Нужно ли устанавливать определенные заголовки для работы BitmapImage? Если да, то как этот точный байт [] image.TruckImg будет отображаться в Gmail правильно, когда я получу почтовое изображение ...

Заранее спасибо! :)

+0

Сообщение об ошибке «Отсутствует компонент обработки изображений, подходящий для завершения этой операции» - это четкое указание на то, что массив байтов не кодирует действительный буфер кодированного изображения, то есть JPEG, PNG и т. Д. – Clemens

+0

Спасибо за комментарий , Я не понимаю, что я могу отправить этот тот же самый байт [] в качестве приложения электронной почты для себя, и он корректно отображает изображение .jpg в моем браузере? – CareTaker22

+0

Да, он добавлен в мой код конверсии выше: 'image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;' – CareTaker22

ответ

0

Я понял, что проблема была отправкой byte[] в виде строки по электронной почте. Как-то копирование всей строки из базы данных в буфер обмена и отправка ее по электронной почте разлагает изображение. Надеюсь, это поможет кому-то, кто совершает те же самые простые ошибки, что и я! : P

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