Как конвертировать 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 и раньше.

Другие вопросы по тегам