Как конвертировать byte[] в BitmapFrame C#
Я пробовал это, но есть исключение - операция не действительна из-за текущего состояния объекта
private BitmapFrame backconvertor(byte[] incomingBuffer)
{
BitmapImage bmpImage = new BitmapImage();
MemoryStream mystream = new MemoryStream(incomingBuffer);
bmpImage.StreamSource = mystream;
BitmapFrame bf = BitmapFrame.Create(bmpImage);
return bf;
}
Ошибка растет, когда я пытаюсь
return backconvertor(buff);
в другой функции (бафф - готов!)
2 ответа
Документация указывает, что для того, чтобы инициализировать изображение, вам нужно сделать это между BeginInit
а также EndInit
, То есть:
bmpImage.BeginInit();
bmpImage.StreamSource = mystream;
bmpImage.EndInit();
Или вы можете передать поток в конструктор:
bmpImage = new BitmapImage(mystream);
См. http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.begininit.aspx для примера и более подробного обсуждения BeginInit
,
Вот что у меня есть в конвертере WPF для обработки байтов в BitmapFrame, и он отлично работает:
var imgBytes = value as byte[];
if (imgBytes == null)
return null;
using (var stream = new MemoryStream(imgBytes))
{
return BitmapFrame.Create(stream,
BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
Также его потокобезопасен, как я использовал его в Task.Run и раньше.