Synchronously download an image from URL

后端 未结 4 2025
离开以前
离开以前 2020-12-24 10:18

I just want to get a BitmapImage from a internet URL, but my function doesn\'t seem to work properly, it only return me a small part of the image. I know WebResponse is work

相关标签:
4条回答
  • 2020-12-24 10:33

    this is the code i use to grab an image from a url....

       // get a stream of the image from the webclient
        using ( Stream stream = webClient.OpenRead( imgeUri ) ) 
        {
          // make a new bmp using the stream
           using ( Bitmap bitmap = new Bitmap( stream ) )
           {
              //flush and close the stream
              stream.Flush( );
              stream.Close( );
              // write the bmp out to disk
              bitmap.Save( saveto );
           }
        }
    
    0 讨论(0)
  • 2020-12-24 10:38

    Why not use System.Net.WebClient.DownloadFile?

    string url = @"http://www.google.ru/images/srpr/logo3w.png";
    string file = System.IO.Path.GetFileName(url);
    System.Net.WebClient cln = new System.Net.WebClient();
    cln.DownloadFile(url,file);
    
    0 讨论(0)
  • 2020-12-24 10:39

    The simpliest is

    Uri pictureUri = new Uri(pictureUrl);
    BitmapImage image = new BitmapImage(pictureUri);
    

    you can then change BitmapCacheOption to start the retrieval process. However, image is retrieved in async. But you shouldn't care much

    0 讨论(0)
  • 2020-12-24 10:43

    First you should just download the image, and store it locally in a temporary file or in a MemoryStream. And then create the BitmapImage object from it.

    You can download the image for example like this:

    Uri urlUri = new Uri(url); 
    var request = WebRequest.CreateDefault(urlUri);
    
    byte[] buffer = new byte[4096];
    
    using (var target = new FileStream(targetFileName, FileMode.Create, FileAccess.Write))
    {
        using (var response = request.GetResponse())
        {    
            using (var stream = response.GetResponseStream())
            {
                int read;
    
                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    target.Write(buffer, 0, read);
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题