Synchronously download an image from URL
11,232
Solution 1
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);
}
}
}
}
Solution 2
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);
Related videos on Youtube
Author by
Karnalta
Updated on June 04, 2022Comments
-
Karnalta almost 2 years
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 working async and that's certainly why I have this problem, but how can I do it synchronously?
internal static BitmapImage GetImageFromUrl(string url) { Uri urlUri = new Uri(url); WebRequest webRequest = WebRequest.CreateDefault(urlUri); webRequest.ContentType = "image/jpeg"; WebResponse webResponse = webRequest.GetResponse(); BitmapImage image = new BitmapImage(); image.BeginInit(); image.StreamSource = webResponse.GetResponseStream(); image.EndInit(); return image; }
-
Karnalta over 13 yearsI don't have much luck with it, my image is still partially downloaded to the MemoryStream, maybe you can provide me a sample code ?
-
treaschf over 13 yearsWhen reading from the response stream, it won't fill up the buffer, as would be the case when reading from a local file. So the amount of bytes read would be less, than the size of the buffer. However it will be greater than 0, which indicates, that the end of the file has not yet been reached. I suppose this is the key of the failure of reading the image completely from the url.
-
Karnalta over 13 yearsOk this sample work to download the picture, I should now be able to convert that file into BitmapImage.