2009-10-22 1 views
2

Этот код возвращает миниатюру изображения, загружаемого из массива байтов. Я пытаюсь понять, почему автор использует 4 потока памяти, и если есть простой способ переписать это, или если все в порядке, то это так.Как упростить этот код MemoryStream

public Image GetThumbnail(int height, int width) 
{ 
    //load the image from a byte array (imageData) 
    using (MemoryStream mem = new MemoryStream(this.imageData)) 
    { 
     // Create a Thumbnail from the image 
     using (Image thumbPhoto = Image.FromStream(mem, 
      true).GetThumbnailImage(height, width, null, 
      new System.IntPtr())) 
     { 
      // Convert the Image object to a byte array 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       thumbPhoto.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
       using (MemoryStream m = new MemoryStream(ms.ToArray())) 
       { 
        return Image.FromStream(m, true); 
       } 
      } 
     } 
    } 
} 

ответ

3

Он на самом деле использует только 3 MemoryStreams здесь, но ему нужно использовать только 2 (я думаю). Вы должны быть в состоянии заменить этот код:

using (MemoryStream m = new MemoryStream(ms.ToArray()))     
{      
    return Image.FromStream(m, true);     
} 

с этим:

ms.Seek(0, SeekOrigin.Begin); 
return Image.FromStream(ms, true); 

Я думаю, что он создал третий MemoryStream, потому что ms MemoryStream не было в самом начале.

+0

Это сделало это. Спасибо –

1
 
public Image GetThumbnail(int height, int width) 
{ 
    //load the image from a byte array (imageData) 
    using (MemoryStream mem = new MemoryStream(this.imageData)) 
    { 
     // Create a Thumbnail from the image 
     using (Image thumbPhoto = Image.FromStream(mem, 
      true).GetThumbnailImage(height, width, null, 
      new System.IntPtr())) 
     { 
      return thumbPhoto; 
     } 
    } 
} 

я думаю, что это будет правильно

+1

Это пропускает преобразование в jpeg. –

+1

Я думаю, что этот метод должен быть лучшим именем как GetThumbAndConverToJpeg :-) люди не всегда конвертируются в jpeg при получении больших пальцев –

+0

Правильно, но вы никогда не сможете переписать метод, основанный на его имени. –

1

Я думаю, что предыдущие ответы не хватает, что автор заставляет преобразования в формате JPEG.

+0

+1 Хороший улов. Я не заметил этой части. Тем не менее, мой ответ держится. – MusiGenesis

+0

-1, должен был быть комментарий по конкретным ответам. –

1

Я думаю, что последний, m, можно устранить. Простого сброса ms.Position=0 было бы достаточно. Обратите внимание, что основная экономия должна была устранить ms.ToArray().

Другие функции MemoryStream выглядят необходимыми или, по крайней мере, их мало можно добиться путем их устранения или повторного использования.

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

  • Нет связанных вопросов^_^