open from c# .net image picturebox loadimage

c# - from - Cargue una imagen de una url en un PictureBox



open image c# (4)

El método incorporado PictureBox.Load (cadena URL) "establece el ImageLocation en la URL especificada y muestra la imagen indicada". (Desde .NetFramework 2)

Quiero cargar una imagen en un PictureBox . Esta es la imagen que quiero cargar: http://www.gravatar.com/avatar/6810d91caff032b202c50701dd3af745?d=identicon&r=PG

¿Cómo hago esto?


Esta es la solución que uso. No recuerdo por qué no podía usar los métodos de PictureBox.Load. Estoy bastante seguro de que es porque quería escalar y centrar correctamente la imagen descargada en el control PictureBox. Si no recuerdo mal, todas las opciones de escalado en PictureBox estirarán la imagen o cambiarán el tamaño del PictureBox para que se ajuste a la imagen. Quería una imagen con una escala y centrada en el tamaño que configuré para PictureBox.

Ahora, solo necesito hacer una versión asíncrona ...

Aquí están mis métodos:

#region Image Utilities /// <summary> /// Loads an image from a URL into a Bitmap object. /// Currently as written if there is an error during downloading of the image, no exception is thrown. /// </summary> /// <param name="url"></param> /// <returns></returns> public static Bitmap LoadPicture(string url) { System.Net.HttpWebRequest wreq; System.Net.HttpWebResponse wresp; Stream mystream; Bitmap bmp; bmp = null; mystream = null; wresp = null; try { wreq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); wreq.AllowWriteStreamBuffering = true; wresp = (System.Net.HttpWebResponse)wreq.GetResponse(); if ((mystream = wresp.GetResponseStream()) != null) bmp = new Bitmap(mystream); } catch { // Do nothing... } finally { if (mystream != null) mystream.Close(); if (wresp != null) wresp.Close(); } return (bmp); } /// <summary> /// Takes in an image, scales it maintaining the proper aspect ratio of the image such it fits in the PictureBox''s canvas size and loads the image into picture box. /// Has an optional param to center the image in the picture box if it''s smaller then canvas size. /// </summary> /// <param name="image">The Image you want to load, see LoadPicture</param> /// <param name="canvas">The canvas you want the picture to load into</param> /// <param name="centerImage"></param> /// <returns></returns> public static Image ResizeImage(Image image, PictureBox canvas, bool centerImage ) { if (image == null || canvas == null) { return null; } int canvasWidth = canvas.Size.Width; int canvasHeight = canvas.Size.Height; int originalWidth = image.Size.Width; int originalHeight = image.Size.Height; System.Drawing.Image thumbnail = new Bitmap(canvasWidth, canvasHeight); // changed parm names System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(thumbnail); graphic.InterpolationMode = InterpolationMode.HighQualityBicubic; graphic.SmoothingMode = SmoothingMode.HighQuality; graphic.PixelOffsetMode = PixelOffsetMode.HighQuality; graphic.CompositingQuality = CompositingQuality.HighQuality; /* ------------------ new code --------------- */ // Figure out the ratio double ratioX = (double)canvasWidth / (double)originalWidth; double ratioY = (double)canvasHeight / (double)originalHeight; double ratio = ratioX < ratioY ? ratioX : ratioY; // use whichever multiplier is smaller // now we can get the new height and width int newHeight = Convert.ToInt32(originalHeight * ratio); int newWidth = Convert.ToInt32(originalWidth * ratio); // Now calculate the X,Y position of the upper-left corner // (one of these will always be zero) int posX = Convert.ToInt32((canvasWidth - (image.Width * ratio)) / 2); int posY = Convert.ToInt32((canvasHeight - (image.Height * ratio)) / 2); if (!centerImage) { posX = 0; posY = 0; } graphic.Clear(Color.White); // white padding graphic.DrawImage(image, posX, posY, newWidth, newHeight); /* ------------- end new code ---------------- */ System.Drawing.Imaging.ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders(); EncoderParameters encoderParameters; encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); Stream s = new System.IO.MemoryStream(); thumbnail.Save(s, info[1], encoderParameters); return Image.FromStream(s); } #endregion

Aquí está el requerido incluye. (Algunos pueden ser necesarios por otro código, pero todos incluidos para estar seguros)

using System.Windows.Forms; using System.Drawing.Drawing2D; using System.IO; using System.Drawing.Imaging; using System.Text.RegularExpressions; using System.Drawing;

Cómo lo uso generalmente:

ImageUtil.ResizeImage(ImageUtil.LoadPicture( "http://someurl/img.jpg", pictureBox1, true);


Prueba esto:

var request = WebRequest.Create("http://www.gravatar.com/avatar/6810d91caff032b202c50701dd3af745?d=identicon&r=PG"); using (var response = request.GetResponse()) using (var stream = response.GetResponseStream()) { pictureBox1.Image = Bitmap.FromStream(stream); }


yourPictureBox.ImageLocation = "http://www.gravatar.com/avatar/6810d91caff032b202c50701dd3af745?d=identicon&r=PG"