Загрузить байт [] в изображение во время выполнения

У меня есть файл byte[], представленный файлом Image . Я скачиваю это Image через файл WebClient . Когда приложение WebClient загрузило изображение и я ссылаюсь на него, используя его URL-адрес, я получаю файл byte[] . У меня вопрос: как загрузить byte[] в Image элемент в WPF? Спасибо.

Примечание . Это дополняет вопрос, который я здесь задал: « Создание изображения во время выполнения» . Мне кажется, что такой подход не работает, поэтому я пробую другой подход.

Ответов (4)

Решение

Вы можете использовать a BitmapImageи установить его StreamSourceкак поток, содержащий двоичные данные. Если вы хотите создать a stream из a byte[], используйте MemoryStream:

MemoryStream stream = new MemoryStream(bytes);

Один из способов, с помощью которого я понял, как это сделать, чтобы он был быстрым и потокобезопасным, заключался в следующем:

 var imgBytes = value as byte[];
 if (imgBytes == null)
  return null;
 using (var stream = new MemoryStream(imgBytes))
   return BitmapFrame.Create(stream,BitmapCreateOptions.None, BitmapCacheOption.OnLoad);

Я бросил это в конвертер для моего приложения WPF после запуска изображений как Varbinary из БД.

Создайте BitmapImage из MemoryStream следующего:

MemoryStream byteStream = new MemoryStream(bytes);
BitmapImage image = new BitmapImage();
image.BeginInit();
image.StreamSource = byteStream;
image.EndInit();

А в XAML вы можете создать Image элемент управления и установить указанное выше image как Sourceсвойство.

В .Net framework 4.0

using System.Drawing;
using System.Web;

private Image GetImageFile(HttpPostedFileBase postedFile)
{
   if (postedFile == null) return null;
   return Image.FromStream(postedFile.InputStream);
}