Создание BitmapImage из массива байтов

Я создаю массив байтов с произвольными значениями в нем и хочу преобразовать его в BitmapImage.

bi = new BitmapImage(); using (MemoryStream stream = new MemoryStream(data)) { try { bi.BeginInit(); bi.CacheOption = BitmapCacheOption.OnLoad; bi.StreamSource = stream; bi.DecodePixelWidth = width; bi.EndInit(); } catch (Exception ex) { return null; } } 

Этот код всегда дает мне исключение NotSupportedException. Как я могу создать BitmapSource из любого массива байтов?

Учитывая массив байтов, где каждый байт представляет значение пикселя, вы можете создать bitmap в gradleациях серого, как показано ниже. Вам нужно указать ширину и высоту растрового изображения, и это, конечно, должно совпадать с размером буфера.

 byte[] buffer = ... // must be at least 10000 bytes long in this example var width = 100; // for example var height = 100; // for example var dpiX = 96d; var dpiY = 96d; var pixelFormat = PixelFormats.Gray8; // grayscale bitmap var bytesPerPixel = (pixelFormat.BitsPerPixel + 7) / 8; // == 1 in this example var stride = bytesPerPixel * width; // == width in this example var bitmap = BitmapSource.Create(width, height, dpiX, dpiY, pixelFormat, null, buffer, stride); 

Каждое значение байта также может представлять собой индекс в цветовой палитре, и в этом случае вам нужно будет указать PixelFormats.Indexed8 и, конечно же, передать соответствующую цветовую палитру.

Байт-массив должен содержать достоверные данные изображения (PNG / JPG / BMP). Если вы удалите используемый блок и данные будут действительны, ваш код должен работать. BitmapImage, похоже, не сразу загружает изображение, поэтому он не может загрузить его после того, как stream уже удален.

Что вы подразумеваете под «произвольными значениями»? Случайные значения RGB? Затем я предлагаю использовать class Bitmap и сохранять полученный Bitmap в Memorystream.

Если вы просто хотите привязать Byte [] и Image Control к вашему пользовательскому интерфейсу: привязать непосредственно к массиву. Он работает без конвертера.

  • События мыши WPF WebBrowser не работают должным образом
  • Изображение панорамы и масштабирования
  • Как обновить ObservableCollection с помощью рабочего streamа?
  • Добавить информацию о форме в ListView, когда она создана
  • Привязка видимости кнопки к значению bool в ViewModel
  • Могу ли я наложить окно WPF поверх другого?
  • Как правильно привязать свойство зависимостей usercontrol в рамках MVVM
  • Связывание Richtextbox wpf
  • В чем разница между x: Reference и ElementName?
  • Приложение .NET не может запускать и получать XamlParseException
  • Рекомендации по док-станции WPF
  • Interesting Posts

    эквивалентная дата от GNU до Solaris

    Как отформатировать / восстановить USB-накопитель с защитой от записи с ошибками ввода-вывода?

    twitter bootstrap navbar фиксированный верхний перекрывающий сайт

    ListView внутри ScrollView не прокручивается на Android

    Как закачать документ в услугу «Угловая 2»

    Запрашивать пароль перед удалением приложения

    Как поддерживать небольшой дифференциальный жесткий диск Virtualbox

    автоматическое увеличение первичных остаточных пробелов в подсчете

    Использование управления изображением в WPF для отображения System.Drawing.Bitmap

    Как получить информацию о пользователе из twitter в приложении Android?

    Если у меня есть два подключения к Интернету в ОСО, как я могу использовать оба для увеличения пропускной способности?

    Совместное использование одного и того же `ssh-agent` между несколькими сеансами входа в систему

    Можно ли запустить экземпляр сервера zookeeper в процессе, скажем, для модульных тестов?

    Карта Choropleth в ggplot с полигонами с отверстиями

    Facebook share link – можете ли вы настроить текст сообщения?

    Давайте будем гением компьютера.