2012-08-27 18 views
7

Estoy tratando de descargar una imagen de un sitio web y crear un mapa de bits basado en esa imagen. Se ve así:Descargar imagen y crear mapa de bits

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); 
    } 

Recibo "Error no especificado" en la última línea del método de devolución de llamada. Lo interesante es que si utilizo BitmapImage (el nuevo Uri ("SITE")) funciona bien ... (No puedo hacer esto porque quiero obtener cookies de esa URL. La imagen es un jpg. PostWebClient clase ->http://paste.org/53413

+0

¿El bytearray tienen la longitud apropiada? ¿Puedes volcar el contenido de byteArray a un archivo y la imagen está allí? – flayn

+0

¿Hay una Image.FromStream en la versión .net de Windows-phone? –

+0

@Pinakin Shah no- es por eso que tengo que crear mapa de bits y usar image.source = bitmap –

Respuesta

3

Usted puede tratar por debajo de código:.

 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

Este es el código más simple de la documentación de la clase 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

probar esto:

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

url - imagen internet, creamos nuevo cuadro de imagen objeto de instancia, a continuación, llamar NO asíncrono procedimiento para cargar imagen de la URL, cuando Obtén la imagen recuperada como mapa de bits. También puede usar Enhebrado para trabajar con formulario, cargar llamada en otro hilo y pasar el método de borrado para recuperar la imagen cuando se complete.

+3

¿Podría también agregar una explicación? – Robert

4

La forma más fácil es abrir un flujo de red a través de una instancia WebClient y pasarlo a the constructor de la clase 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"); 
     } 
    } 
} 
Cuestiones relacionadas