как конвертировать byte [] в BitmapFrame c # - PullRequest
0 голосов
/ 28 ноября 2011

Я пробовал это, но есть исключение - операция недействительна из-за текущего состояния объекта

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 ]

2 голосов
/ 28 ноября 2011

Документация указывает, что для инициализации изображения вам необходимо сделать это в диапазоне от 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.

1 голос
/ 21 марта 2016

Это то, что у меня есть в конвертере 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 и раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...