2012-08-27 12 views
7

Sto cercando di scaricare l'immagine da un sito Web e creare bitmap in base a quell'immagine. Assomiglia a questo:Scarica immagine e crea bitmap

public void test() 
    { 
      PostWebClient client = new PostWebClient(callback); 
      cookieContainer = new CookieContainer(); 
      client.cookies = cookieContainer; 
      client.download(new Uri("SITE")); 
    } 

    public void callback(bool error, string res) 
    { 
      byte[] byteArray = UnicodeEncoding.UTF8.GetBytes(res); 

      MemoryStream stream = new MemoryStream(byteArray); 
      var tmp = new BitmapImage(); 
      tmp.SetSource(stream); 
    } 

Ricevo "Errore non specificato" sull'ultima riga del metodo di richiamata. Fatto interessante è che se uso BitmapImage (nuovo Uri ("SITE")) funziona bene ... (Non posso farlo in questo modo perché voglio prendere i cookie da quell'URL. L'immagine è un jpg. PostWebClient classe ->http://paste.org/53413

+0

Dispone la ByteArray ha la giusta lunghezza? Puoi scaricare il contenuto di byteArray in un file e l'immagine è lì? – flayn

+0

Esiste un Image.FromStream nella versione di Windows Phone .net? –

+0

@Pinakin Shah no- questo è il motivo per cui devo creare bitmap e usare image.source = bitmap –

risposta

3

si può provare sottostante codice:.

 private Bitmap LoadPicture(string url) 
     { 
      HttpWebRequest wreq; 
      HttpWebResponse wresp; 
      Stream mystream; 
      Bitmap bmp; 

      bmp = null; 
      mystream = null; 
      wresp = null; 
      try 
      { 
       wreq = (HttpWebRequest)WebRequest.Create(url); 
       wreq.AllowWriteStreamBuffering = true; 

       wresp = (HttpWebResponse)wreq.GetResponse(); 

       if ((mystream = wresp.GetResponseStream()) != null) 
        bmp = new Bitmap(mystream); 
      } 
      finally 
      { 
       if (mystream != null) 
        mystream.Close(); 

       if (wresp != null) 
        wresp.Close(); 
      } 
      return (bmp); 
     } 
18

Questo è il codice più semplice da documentazione classe Bitmap

System.Net.WebRequest request = 
     System.Net.WebRequest.Create(
     "http://www.microsoft.com//h/en-us/r/ms_masthead_ltr.gif"); 
    System.Net.WebResponse response = request.GetResponse(); 
    System.IO.Stream responseStream = 
     response.GetResponseStream(); 
    Bitmap bitmap2 = new Bitmap(responseStream); 

MSDN link for Bitmap

0

provare questo:

  string url ="http://www.google.ru/images/srpr/logo11w.png" 
      PictureBox picbox = new PictureBox(); 
      picbox.Load(url); 
      Bitmap bitmapRemote = (Bitmap) picbox.Image; 

url - immagine internet, creiamo nuova PictureBox oggetto istanza, quindi chiamando NON asincrona procedura per caricare un'immagine da url, quando l'immagine ottenere l'immagine recuperata come bitmap. È inoltre possibile utilizzare Threading per lavorare con il modulo, caricare la chiamata in altro thread e passare il metodo deleate per recuperare l'immagine al termine.

+3

Potresti anche aggiungere una spiegazione? – Robert

4

Il modo più semplice è quello di aprire un flusso di rete tramite un'istanza WebClient e passarlo a the constructor della classe Bitmap:

using (WebClient wc = new WebClient()) 
{ 
    using (Stream s = wc.OpenRead("http://hell.com/leaders/cthulhu.jpg")) 
    { 
     using (Bitmap bmp = new Bitmap(s)) 
     { 
      bmp.Save("C:\\temp\\octopus.jpg"); 
     } 
    } 
}