¿Hay alguna manera de vincular un MemoryStream a asp: control de imagen?Cómo vincular un MemoryStream a asp: ¿control de imagen?
Respuesta
un controlador puede aceptar un parámetro de URL como cualquier otra petición. Entonces, en lugar de vincular su <asp:image/>
al image.ashx
, lo establecería en image.ashx?ImageID=[Your image ID here]
.
Y la biblioteca http://imageresizing.net hace eso por usted. –
La mejor opción es crear un HttpHandler que devuelva la imagen. A continuación, vincula la propiedad ImageUrl en el asp: Image a la url del HttpHandler.
Aquí hay algunos códigos.
En primer lugar crear el HttpHandler:
<%@ WebHandler Language="C#" Class="ImageHandler" %>
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
public class ImageHandler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.Clear();
if (!String.IsNullOrEmpty(context.Request.QueryString["id"]))
{
int id = Int32.Parse(context.Request.QueryString["id"]);
// Now you have the id, do what you want with it, to get the right image
// More than likely, just pass it to the method, that builds the image
Image image = GetImage(id);
// Of course set this to whatever your format is of the image
context.Response.ContentType = "image/jpeg";
// Save the image to the OutputStream
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
else
{
context.Response.ContentType = "text/html";
context.Response.Write("<p>Need a valid id</p>");
}
}
public bool IsReusable
{
get
{
return false;
}
}
private Image GetImage(int id)
{
// Not sure how you are building your MemoryStream
// Once you have it, you just use the Image class to
// create the image from the stream.
MemoryStream stream = new MemoryStream();
return Image.FromStream(stream);
}
}
A continuación, simplemente llame dentro de su página aspx donde se está utilizando el asp: Imagen.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Image ID="myImage" ImageUrl="~/ImageHandler.ashx?id=1" runat="server" />
</div>
</form>
</body>
</html>
Y eso es todo.
¿Hay alguna manera de hacer esto sin HttpHandler, no tengo escribir para crear controlador en mi proyecto ' –
Estoy asumiendo que necesita para generar imágenes dinámicas de asp.net Es posible que en la suerte http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16449
Hanselman escribió en su blog sobre él recientemente http://www.hanselman.com/blog/ASPNETFuturesGeneratingDynamicImagesWithHttpHandlersGetsEasier.aspx
Mientras DataBinding un MemoryStream a una imagen que no es posible , podría ser posible utilizar Label/GenericControl, algún código y data URI scheme para incrustar imágenes en páginas, pero existen problemas graves con ese enfoque:
Desventajas
- contenido interno debe ser extraído y decodificado antes se pueden hacer cambios, entonces vuelven a codificar y re-incrustado después.
- Las cookies no son compatibles.
- La información que está incorporada más de una vez se vuelve a descargar como parte del archivo contenedor y, por lo tanto, no se beneficia de la memoria caché del navegador.
- Los navegadores pueden limitar la longitud de URI, creando un tamaño de datos máximo efectivo. Por ejemplo, los URI en versiones anteriores de Opera tenían límites de 4kB y 32kB para IE8 Beta 1 [citación necesitada]
- Los datos se incluyen como una secuencia simple y es posible que muchos entornos de procesamiento (como los navegadores web) no admitan el uso de contenedores (como multipart/alternative o message/rfc822) para proporcionar una mayor complejidad, como metadatos, compresión de datos o negociación de contenido.
- Microsoft Internet Explorer, hasta la versión 7 (aproximadamente el 70% del mercado a partir del 2008 Q2), carece de soporte.
El mejor enfoque es utilizar una página separada "Image.aspx", que tiene salidas y su MemoryStream, un poco como lo hice en mi software de álbum de fotos que he creado cuando empecé a aprender ASP.net :
(Don't laugh, that was my first attempt at ASP.net :-)
Editar: Acordado el ASHX, el código anterior es sólo para mostrar un ejemplo de implementación. Cuando regrese para actualizar el álbum de fotos, usará ASHX para eso.
@Will y Ben Griswald: en lugar de "image.aspx" usa "image.ashx".
Es más liviano que un ASP completo.Net Page, y está específicamente diseñado para manejar tipos de contenido que no sean text/html.
No.
Pero puede crear una página especial para transmitir esa imagen. En primer lugar, se establece la dirección URL de la imagen para la página que realiza la transmisión, incluyendo algunos parámetros de URL que le permiten saber dónde obtener la imagen:
<img src="GetImage.aspx?filename=foo" ... />
en GetImage.aspx, se obtiene el nombre del archivo (o lo que sea) a partir de la URL, cargar la imagen en su MemoryStream, y luego escribir el contenido de esa secuencia de memoria directamente a la HttpResponse:
response.Expires = 0;
response.Buffer = false;
response.Clear();
response.ClearHeaders();
response.ClearContent();
response.ContentType = "image/jpeg";
response.BinaryWrite(stream);
response.Flush();
response.Close();
Puede usar el control BinaryImage de Telerik para ASP.net.
Más información aquí: http://www.telerik.com/products/aspnet-ajax/binaryimage.aspx
Para mí fue necesario añadir "buffer =" false" a la @Page De lo contrario me gustaría seguir recibiendo la misma imagen todo el tiempo ...
- 1. WPF - Vincular propiedad de imagen al control de imagen
- 2. ASP MVC.NET: cómo vincular KeyValuePair?
- 3. ¿Cómo vincular la propiedad de un control a la propiedad de otro control?
- 4. ¿Cómo vincular el control TextBox a una instancia de StringBuilder?
- 5. Acceso a un control asp: hiddenfield en JavaScript
- 6. Agregar atributos personalizados a un asp: Control CheckBox
- 7. Asp: imagen con enlace
- 8. ¿Pueden los datos vincular un control TreeView?
- 9. Anexando a MemoryStream
- 10. Cómo vincular una imagen y apuntar a una nueva ventana
- 11. ¿Cómo vincular un comando en WPF a un controlador de eventos de doble clic de un control?
- 12. ¿Cómo vincular en WPF un objeto completo a un control de usuario?
- 13. WPF - Vincular visibilidad de control de usuario a una propiedad
- 14. ASP.NET 2.0: cómo enlazar un menú asp: a un SqlDataSource?
- 15. desea volver a utilizar MemoryStream
- 16. HTML5 cómo vincular la base de datos local a asp gridview
- 17. ¿Cómo puedo vincular los modelos de vista anidados a las propiedades de un control?
- 18. asp: Control literal nulo en el control de usuario
- 19. ¿Cómo puedo vincular un FormView ASP.NET a un solo registro?
- 20. ¿Cuál es la mejor manera de vincular el par clave/valor a una etiqueta asp?
- 21. C# Fundición MemoryStream a FileStream
- 22. Cómo vincular un socket a múltiples interfaces
- 23. ¿Cómo vincular a un archivo libc diferente?
- 24. C# gif Imagen en MemoryStream y volver (perder animación)
- 25. ¿Cómo vincular una imagen a un formulario de edición en Django?
- 26. ¿Puedo vincular un control WPF a la propiedad de un campo?
- 27. Lectura de flujo a un MemoryStream en múltiples hilos
- 28. ¿Cómo obtener un MemoryStream de un Stream en .NET?
- 29. MemoryStream frente a una matriz de bytes
- 30. Mostrar imagen basada en un valor en asp columna GridView
. El http://imageresizing.net HttpModule hace que sea muy fácil. –
gracias a todos por sus respuestas. También usé el httphandler para este problema, pero necesito un poco más que eso. Quiero pasar un parámetro a httphandler que genere diferentes imágenes a una Grilla y la diferencia será provista por id de la fila, así que tengo que pasar un parámetro a este httphandler. ¿Es conveniente? ¿Tiene una sugerencia? –