Подтвердить что ты не робот

MemoryStream.Read не копирует байты в буфер - С#

Я действительно не понимаю, и это сводит меня с ума. У меня эти 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 значений. Я не могу понять, почему это происходит? в этих нескольких строках нечего делать неправильно! если бы кто-нибудь мог мне помочь, мы будем очень благодарны! благодаря, Агнешка

4b9b3361

Ответ 1

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

Ответ 2

Вам нужно reset указатель файла.

imageStream.Seek( 0, SeekOrigin.Begin );

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

Ответ 3

Добавить

imageStream.Position = 0;

прямо перед:

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

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

Ответ 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.Position = 0;//Reset the position at the start
imageStream.Read(contentBuffer, 0, contentBuffer.Length);

Ответ 5

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

imageStream.ToArray()

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