Потоке MemoryStream.Чтение не копирует байты в буфер-c#

Я не поняла и это сводит меня с ума. у меня есть эти 4 строки:

Image img = Image.FromFile("F:Pulpitsoa.bmp");
MemoryStream imageStream = new MemoryStream();
img.Save(imageStream, ImageFormat.Bmp);
byte[] contentBuffer = new byte[imageStream.Length];
imageStream.Read(contentBuffer, 0, contentBuffer.Length);

при отладке я вижу значения байтов в imageStream. после imageStream.Прочитал я проверяю содержимое contentBuffer и вижу только 255 значений. я не могу понять, почему это происходит? в этих строчках нет ничего плохого! если бы кто-нибудь мог мне помочь, я был бы очень признателен! спасибо, Агнешка!--2-->

5 ответов


попробуйте установить imageStream.Положение 0. Когда вы пишете в MemoryStream, он перемещает позицию после байтов, которые вы только что написали, поэтому, если вы попытаетесь прочитать, там ничего нет.


вам нужно сбросить указатель на файл.

imageStream.Seek( 0, SeekOrigin.Begin );

в противном случае Вы читаете с конца потока.


добавить:

imageStream.Position = 0;

перед:

imageStream.Read(contentBuffer, 0, contentBuffer.Length);

0 в инструкции read означает смещение от текущей позиции в потоке памяти, а не начало потока. После того, как поток был загружен, позиция в конце. Вам нужно сбросить его до начала.


Image img = Image.FromFile("F:\Pulpit\soa.bmp");
MemoryStream imageStream = new MemoryStream();
img.Save(imageStream, ImageFormat.Bmp);
byte[] contentBuffer = new byte[imageStream.Length];
imageStream.Position = 0;//Reset the position at the start
imageStream.Read(contentBuffer, 0, contentBuffer.Length);

просто использовать

imageStream.ToArray()

это работает и это проще.