De façon synchrone télécharger une image à partir de l'URL
Je veux juste obtenir un BitmapImage à partir d'une URL internet, mais ma fonction ne semble pas fonctionner correctement, il ne m'a fait une petite partie de l'image. Je sais WebResponse est de travail asynchrone et c'est certainement pourquoi j'ai ce problème, mais comment puis-je le faire de manière synchrone?
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;
}
OriginalL'auteur Karnalta | 2010-09-07
Vous devez vous connecter pour publier un commentaire.
D'abord, vous devez simplement télécharger l'image et de l'enregistrer localement dans un fichier temporaire ou dans une
MemoryStream
. Et puis créer laBitmapImage
objet à partir d'elle.Vous pouvez télécharger l'image, par exemple comme ceci:
Lors de la lecture à partir du flux de la réponse, il ne sera pas de remplissage de la mémoire tampon, comme ce serait le cas lors de la lecture à partir d'un fichier local. De sorte que la quantité d'octets lus serait moins, que la taille de la mémoire tampon. Cependant, il va être plus grand que 0, ce qui indique que la fin du fichier n'a pas encore été atteint. Je suppose que c'est la clé de l'échec de la lecture de l'image complètement à partir de l'url.
Ok ce travail d'échantillonnage pour télécharger l'image, je dois maintenant être en mesure de convertir ce fichier dans BitmapImage.
OriginalL'auteur treaschf
Pourquoi ne pas utiliser
System.Net.WebClient.DownloadFile
?OriginalL'auteur mdn
c'est le code que j'utilise pour extraire une image à partir d'une url....
OriginalL'auteur Muad'Dib
Le principe le plus simple est
vous pouvez ensuite modifier BitmapCacheOption pour démarrer le processus de récupération. Cependant, l'image est récupérée dans asynchrone. Mais vous ne devriez pas trop
OriginalL'auteur user2352580