2017-02-16 3 views
0

Как преобразовать BitmapSource в MemoryStream. Хотя я попробовал код:Преобразование BitmapSource в MemoryStream

private Stream StreamFromBitmapSource(BitmapSource writeBmp) 
{ 
    Stream bmp; 
    using (bmp = new MemoryStream()) 
    {      
     BitmapEncoder enc = new BmpBitmapEncoder(); 
     enc.Frames.Add(BitmapFrame.Create(writeBmp)); 
     enc.Save(bmp);          
    } 

    return bmp; 
} 

Это не дает какой-либо ошибки, но после ввода точки отладки он показывает некоторые исключения, которые перечислены ниже.

Вместимость: 'printStream.Capacity' сгенерировала исключение типа 'System.ObjectDisposedException' Длина: 'printStream.Length' бросили исключение типа '' System.ObjectDisposedException Позиция: 'printStream.Position' бросил исключение типа «» System.ObjectDisposedException

+0

Пожалуйста, обратите внимание на [? Что я должен делать, когда кто-то отвечает на мой вопрос] (http://stackoverflow.com/help/someone-answers) Кроме того, что делают вы собираетесь делать с MemoryStream после того, как вы написали кодированное растровое изображение? Вам, вероятно, просто нужен результирующий буфер, т. Е. Массив байтов? – Clemens

+0

Спасибо! Клеменс, я отдал свои голоса на ответы. :), и я хочу, чтобы мои цветовые кадры получали буфер памяти, чтобы легко использовать «API распознавания лиц». Итак, я возвращаю свой результат в «поток», который будет использовать мой API распознавания лиц. –

+0

Вы также должны принять ответ. Проблема, с которой вы сейчас сталкиваетесь, - это другой вопрос. – Clemens

ответ

2

using (bmp = new MemoryStream()) вызывает bmp объект разрушается на конце с помощью блока. И вы возвращаете переменную, которая уничтожается bmp.

Удалить с помощью:

private Stream StreamFromBitmapSource(BitmapSource writeBmp) 
{ 
    Stream bmp = new MemoryStream(); 

    BitmapEncoder enc = new BmpBitmapEncoder(); 
    enc.Frames.Add(BitmapFrame.Create(writeBmp)); 
    enc.Save(bmp);            

    return bmp; 
} 
+0

' ReadTimeout = 'imgStream.ReadTimeout' бросил исключение типа 'System.InvalidOperationException''' WriteTimeout =' imgStream.WriteTimeout 'бросил исключение типа «System.InvalidOperationException». Спасибо, что помогли мне. Но теперь я столкнулся с проблемой с этими двумя исключениями –

0

проблема здесь состоит в том, что вы создаете bmp внутри using, поэтому он был удален, прежде чем вернуть его (он расположен, как только вы оставить с помощью) и это объясняет исключения вы получаете.

private Stream StreamFromBitmapSource(BitmapSource writeBmp) 
{ 
    Stream bmp= new MemoryStream(); 
    using (enc = new BmpBitmapEncoder()) 
    {      
     enc.Frames.Add(BitmapFrame.Create(writeBmp)); 
     enc.Save(bmp);          
    } 

    return bmp; 
} 
+0

'ReadTimeout = 'imgStream.ReadTimeout' выбрасывает исключение типа« System.InvalidOperationException »' 'WriteTimeout = 'imgStream.WriteTimeout' выбрасывает исключение типа« System.InvalidOperationException ». Спасибо, что помогли мне. Но теперь я столкнулся с проблемой с этими двумя исключениями. –

+0

Может помочь http://stackoverflow.com/questions/28172110/readtimeout-exception-with-memorystream – moondaisy

+0

Нет, это не помогает, и вместо этого я использую «BitmapSource» из 'Bitmap' –

Смежные вопросы