Tengo una matriz de bytes que representa una imagen. Quiero presentar la imagen almacenada en ese conjunto de bytes en una página aspx. ¿Puedo hacerlo usando un control de imagen o mapa de imágenes? ¿Si es así, cómo? Si no, ¿cuál es la solución?bytearray a imagen asp.net
Respuesta
Piense en cómo se sirven las imágenes normales en una página web: el nombre del archivo se referencia en el marcado, y el navegador envía una solicitud por separado al servidor para ese archivo.
El mismo principio se aplica aquí, pero en lugar de hacer referencia a un archivo de imagen estática, que se quiere hacer referencia a un controlador de ASP.NET que sirve los bytes de la imagen:
<img src="/imagehandler.ashx" />
El corto del manipulador haría algo parecido a esto:
public class ImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.OutputStream.Write(imageData, 0, imageData.Length);
context.Response.ContentType = "image/JPEG";
}
}
Aquí es un (largo) resource that covers the concepts de crear un HttpHander en ASP.NET.
Además, como señala Joel, piense de dónde viene la matriz de bytes, ya que HttpHandler se sirve en una solicitud totalmente diferente a la de la página. En el nivel más básico, las dos solicitudes no se conocen entre sí ni comparten ningún dato.
Una solución común a este problema es poner los datos de la imagen en la memoria caché:
Guid id = Guid.NewGuid();
HttpRuntime.Cache.Add(id.ToString(), imageData);
y pasar la llave de la HttpHandler en la cadena de consulta, por lo que puede recuperar desde la memoria caché:
<img src="/imagehandler.ashx?img=<%=id%>" />
<!-- will print ...ashx?img=42a96c06-c5dd-488c-906f-cf20663d0a43 -->
se puede escribir un controlador genérico que servirá la imagen:
<%@ WebHandler Language="C#" Class="Picture" %>
public class Picture : System.Web.IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
byte[] buffer = GetPictureFromSomewhere();
context.Response.ContentType = "image/jpeg";
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
}
public bool IsReusable
{
get { return false; }
}
}
y luego llamar i t en una página aspx:
<asp:Image ID="pic" runat="server" ImageUrl="~/Picture.ashx" />
El siguiente artículo responde a la suya pregunta: Auto-bind byte[] to asp:Image
Otra cosa que puede hacer que sea más rápida sería la de no utilizar el control asp.net y utilizando un elemento básico img en html. Por lo tanto, dentro de su página asp.net, cree un elemento img con un id de img y runat establecido en el servidor.
entonces se podría hacer algo como esto:
<img id="img" runat="server" alt=""/>
public DataRow ClaimPhotoRow { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
img.Src = "data:image/jpg;base64," + Convert.ToBase64String((byte[])ClaimPhotoRow[0]);
}
Gracias por buen truco :) –
Solución inteligente. Tenga en cuenta que los IE anteriores a la versión 8 no pueden usar el esquema de URL de datos http://caniuse.com/datauri –
Muchas gracias por resolver mi problema con el menor número de pasos. – Ahmad
- 1. Cómo convertir bytearray a imagen o imagen a bytearray?
- 2. mostrar imagen de byteArray
- 3. Enviar ByteArray a JavaScript
- 4. Obtener tamaño de imagen de ByteArray
- 5. Enlace de datos en la imagen pero necesito un byteArray
- 6. Python: bytearray vs array
- 7. Conversión de mapa de bits a byteArray android
- 8. cómo responder.write bytearray?
- 9. Transferencia ByteArray través de paquete vuelve NullPointerException
- 10. mezclando 2 sonidos de ByteArray
- 11. Superclase de bytes y bytearray?
- 12. AS3 Objeto personalizado a ByteArray luego al objeto personalizado
- 13. Python 3: interfaz de secuencia no copiada a bytearray?
- 14. Convertir imagen a byte con php
- 15. ¿Leído en un bytearray en un desplazamiento?
- 16. Necesito crear PDF desde bytearray (Java)
- 17. Descarga de un ByteArray con Actionscript 3
- 18. Byte de transmisión [] a Imagen en ASP.NET C#
- 19. Enviar una imagen de Android a un servicio web ASP.NET
- 20. ¿Cómo paso una imagen de Flash a ASP.NET?
- 21. ¿Cómo puedo enviar un ByteArray (desde Flash) y algunos datos de formulario a php?
- 22. ASP.NET Imagen de retorno del enlace .aspx
- 23. ASP.NET MVC URL de imagen generadas dinámicamente
- 24. ¿Cómo debo devolver una imagen de una acción del controlador C# asp.net-mvc-2?
- 25. ASP.NET imagen Cambiar el tamaño y Recorte
- 26. ASP.NET - La imagen no se muestra
- 27. Actualizar imagen sin parpadear ASP.NET C#
- 28. crear mapa de bits de byteArray en android
- 29. bytes vs bytearray en Python 2.6 y 3
- 30. ¿Cómo obtengo un bytearray de IL de DynamicMethod?
+1 - también en cuenta esto significa que es probable que tenga que volver a pensar en cómo funciona su página actual, ya que es probable que obtuvo el matriz de bytes durante el procesamiento de una solicitud de un recurso diferente. –
Buen punto Joel. –