2012-08-03 40 views
26

estoy usando VB.Net He una url de una imagen, digamos http://localhost/image.gif¿Cómo puedo convertir una imagen url para System.Drawing.Image

Necesito crear un objeto System.Drawing.Image de ese archivo.

Aviso guardar esta en un archivo y luego abrirlo no es una de mis opciones También estoy usando ItextSharp

aquí está mi código:

Dim rect As iTextSharp.text.Rectangle 
     rect = iTextSharp.text.PageSize.LETTER 
     Dim x As PDFDocument = New PDFDocument("chart", rect, 1, 1, 1, 1) 

     x.UserName = objCurrentUser.FullName 
     x.WritePageHeader(1) 
     For i = 0 To chartObj.Count - 1 
      Dim chartLink as string = "http://localhost/image.gif" 
      x.writechart(** it only accept system.darwing.image **) 

     Next 

     x.WritePageFooter() 
     x.Finish(False) 

Respuesta

48

usted podría utilizar la clase WebClient para descargar la imagen y luego MemoryStream a la leyó:

C#

WebClient wc = new WebClient(); 
byte[] bytes = wc.DownloadData("http://localhost/image.gif"); 
MemoryStream ms = new MemoryStream(bytes); 
System.Drawing.Image img = System.Drawing.Image.FromStream(ms); 

VB

Dim wc As New WebClient() 
Dim bytes As Byte() = wc.DownloadData("http://localhost/image.gif") 
Dim ms As New MemoryStream(bytes) 
Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(ms) 
+0

Si estaban preocupados por la si la imagen no está allí, ¿pondría la sección MemoryStream en una declaración de uso? – Jason

+0

Funciona perfecto. Lo uso con éxito –

+0

Recomendaría esto TAN DIFÍCIL si proporcionó tanto ASP.Net MVC como ASP.Net Core solución a la ruta C# - (ASP.Net Core no puede usar 'WebClient') – NoReceipt4Panda

1

Puede probar esto para obtener la imagen

Dim req As System.Net.WebRequest = System.Net.WebRequest.Create("[URL here]") 
Dim response As System.Net.WebResponse = req.GetResponse() 
Dim stream As Stream = response.GetResponseStream() 

Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(stream) 
stream.Close() 
+0

¿Puede decirme cómo puedo hacer lo mismo? Creo que con una página que 'Response.ContentType =" image/png "' realmente aprecié –

+0

Podría hacerlo de la misma manera, como cualquier imagen, 'response.GetResponseStream()' debe funcionar bien. –

0
Dim c As New System.Net.WebClient 
Dim FileName As String = "c:\StackOverflow.png" 
c.DownloadFile(New System.Uri("http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=5"), FileName) 
Dim img As System.Drawing.Image 
img = System.Drawing.Image.FromFile(FileName) 
+0

En realidad, me gusta su mejor^Me apresuré a ser el primero. – blang32

1

iTextSharp es capaz de aceptar Uri:

Image.GetInstance(uri) 
6

Las otras respuestas también son correctas, pero duele ver que Webclient y MemoryStream no se eliminan, recomiendo poner su código en using.

código Ejemplo:

using (var wc = new WebClient()) 
{ 
    using (var imgStream = new MemoryStream(wc.DownloadData(imgUrl))) 
    { 
     using (var objImage = Image.FromStream(imgStream)) 
     { 
      //do stuff with the image 
     } 
    } 
} 

Las importaciones requeridas en la parte superior de su archivo son System.IO, System.Net & System.Drawing

En VB.net la sintaxis era using wc as WebClient = new WebClient() { etc

Cuestiones relacionadas