2016-10-26 5 views
1

Я объявляю список для хранения url изображения
И вызвать метод LoadBitmap, чтобы получить поток изображения.Как сохранить изображение в коллекции и загрузить изображение в картинке

  //this list to store url list 
     List<string> imageFileList=new List<string>(); 
     //this list to store return image stream 
     List<Stream> imageFiles = new List<Stream>(); 

     imageFileList.Add("some picture url"); 
     imageFileList.Add("some picture url"); 

     imageFileList.ForEach(delegate(String imgurl) 
     { 
      Stream tempFile = LoadBitmap(imgurl); 
      imageFiles.Add(tempFile); 
      tempFile.Dispose(); 
     }); 

     private Stream LoadBitmap(string imageUrl) 
     { 
      Stream image; 
      HttpWebRequest request =(HttpWebRequest)WebRequest.Create(imageUrl); 

      using (var response = request.GetResponse()) 
      using (var stream = response.GetResponseStream()) 
      { 
       image=stream; 
      } 

       return image; 
     } 

Я хранил поток изображения в списке.
Затем цикл загрузки этих потока в PictureBox

foreach (Stream imageFile in imageFileList) 
    { 
      PictureBox eachPictureBox = new PictureBox(); 
      eachPictureBox.SizeMode = PictureBoxSizeMode.AutoSize; 
      //Load Image from resource 
      eachPictureBox.Image = Image.FromStream(imageFile); 
    } 

Но когда запуск программы в «»
эта линия будет произошла ошибка: WebException.
Я также попробую List<Image> и imageList, чтобы сохранить изображение, после чего снова возникла ошибка.
У кого-нибудь есть идея, как решить эту проблему?

+3

Вы распорядились поток, а затем вы пытаетесь для получения изображения из потока. Не удаляйте поток или вместо этого храните 'Image' в списке и используйте его, когда вам нужно. –

+1

Вы не должны кэшировать поток, вы должны загрузить растровое изображение непосредственно в список. –

ответ

2

Вы установили поток, а затем пытаетесь получить изображение из потока. Не удаляйте поток или вместо этого сохраняйте изображение в списке и используйте его, когда вам нужно. Например, вы можете использовать такой код:

List<Image> images = new List<Image>(); 
... 
using (var s = new System.IO.FileStream(imageFilePath, System.IO.FileMode.Open)) 
{ 
    images.Add(Image.FromStream(s)); 
} 

Затем, когда вам нужно использовать образ, просто получить его из списка, например:

pictureBox1.Image = images[0]; 
+0

Спасибо. Я успех. –

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