Хорошо, просто чтобы прояснить ситуацию немного ... проблема в том, что new Bitmap(ms)
будет считывать данные из текущей позиции потока - если поток в данный момент расположен на конце данные, он ничего не сможет прочитать, отсюда и проблема.
В вопросе утверждается, что код такой:
MemoryStream ms = new MemoryStream(b);
Bitmap bmp = new Bitmap(ms);
В этом случае нет требования для сброса положения потока, так как оно уже будет 0. Тем не менее, я подозреваю, что код на самом деле больше похож на это:
MemoryStream ms = new MemoryStream();
// Copy data into ms here, e.g. reading from NetworkStream
Bitmap bmp = new Bitmap(ms);
или, возможно:
MemoryStream ms = new MemoryStream(b);
// Other code which *reads* from ms, which will change its position,
// before we finally call the constructor:
Bitmap bmp = new Bitmap(ms);
В этом случае вам do необходимо сбросить позицию, потому что в противном случае «курсор» потока находится на конце данных вместо начала. Лично я предпочитаю использовать свойство Position
вместо метода Seek
, просто для простоты, поэтому я бы использовал:
MemoryStream ms = new MemoryStream();
// Copy data into ms here, e.g. reading from NetworkStream
// Rewind the stream ready for reading
ms.Position = 0;
Bitmap bmp = new Bitmap(ms);
Это просто показывает, насколько важно, чтобы пример кода в вопросе представлял фактический код ...