MemoryStream.Read не копирует байты в буфер - c # - PullRequest
18 голосов
/ 18 декабря 2008

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

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

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

Ответы [ 5 ]

39 голосов
/ 18 декабря 2008

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

25 голосов
/ 18 декабря 2008

Вам необходимо сбросить указатель файла.

imageStream.Seek( 0, SeekOrigin.Begin );

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

12 голосов
/ 18 декабря 2008

Добавить:

imageStream.Position = 0;

прямо перед:

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

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

8 голосов
/ 18 декабря 2008
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);
5 голосов
/ 18 октября 2010

Просто используйте

imageStream.ToArray()

Работает и легче.

...