Преобразовать поток памяти в BitmapImage?
У меня есть образ, который изначально был PNG, который я преобразовал в байт [] и сохранил в базе данных. Первоначально я просто читал PNG в поток памяти и преобразовывал поток в байт []. Теперь я хочу прочитать байт [] назад и преобразовать его в BitmapImage, чтобы я мог привязать к нему элемент управления WPF.
Я вижу много противоречивого и запутанного кода онлайн, чтобы выполнить задачу преобразования байта [] в BitmapImage. Я не уверен, нужно ли добавлять код из-за того, что изображение изначально было PNG.
Может ли кто-нибудь предоставить код для преобразования потока в BitmapImage? Благодарим за помощь.
Ответы
Ответ 1
Это должно сделать это:
using (var stream = new MemoryStream(data))
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = stream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
bitmap.Freeze();
}
BitmapCacheOption.OnLoad
важно в этом случае, потому что в противном случае BitmapImage может попытаться получить доступ к потоку при загрузке по требованию, и поток уже может быть закрыт.
Замораживание растрового изображения является необязательным, но если вы его заморозите, вы можете разделить растровое изображение по потокам, что в противном случае невозможно.
Вам не нужно делать ничего особенного в отношении формата изображения - BitmapImage справится с этим.
Ответ 2
using (var stream = new MemoryStream(data))
{
var bi = BitmapFrame.Create(stream , BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.OnLoad);
}