2012-08-27 69 views
7

我试图从网站下载图像,并创建基于该图像的位图。它看起来像这样:下载图像并创建位图

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

我在回调方法的最后一行收到“未指定的错误”。有趣的事实是,如果我使用BitmapImage(新的Uri(“SITE”)),它的效果很好......(我不能这样做,因为我想从该URL获取cookie,该图像是一个jpg PostWebClient类 - >http://paste.org/53413

+0

是否有ByteArray中适当的长度?你可以将byteArray的内容转储到一个文件并且映像在那里? – flayn

+0

在windows-phone .net版本中是否有Image.FromStream? –

+0

@Pinakin Shah no-这就是为什么我必须创建位图和使用image.source =位图 –

回答

3

你可以试试下面的代码:

 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

这是从位图类文档最简单的代码

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

试试这个:

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

网址 - 网上的形象,我们创建新实例对象的PictureBox,然后调用不是异步过程从URL,当图像检索获取的图像作为位图图像加载。 你也可以使用线程与表单一起工作,在其他线程中调用加载并在完成时传递删除方法以检索图像。

+3

你能否也添加一个解释? – Robert

4

最简单的方法是通过WebClient例如打开一个网络数据流,并把它传递给Bitmapthe constructor

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