bytearray来映像asp.net

时间:2009-11-15 16:31:39

标签: asp.net image bytearray

我有一个表示图片的字节数组。我想在aspx页面中呈现存储在该字节数组中的图片。我可以使用图像或图像映射控件吗?如果是这样 - 怎么样?如果不是 - 解决方案是什么?

4 个答案:

答案 0 :(得分:35)

你可以做的另一件更快的事情就是不使用asp.net Image控件并在html中使用基本的img元素。因此,在您的asp.net页面中,创建一个idg为img且runat设置为server的img元素。

然后你可以这样做:

<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]);

}

答案 1 :(得分:21)

考虑如何在网页中提供正常图像 - 文件名在标记中引用,浏览器向服务器发送单独的请求以获取该文件。

此处适用相同的原则,除了不引用静态图像文件之外,您还需要引用一个提供图像字节的ASP.NET处理程序:

<img src="/imagehandler.ashx" />

处理程序的缺点看起来像这样:

public class ImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.OutputStream.Write(imageData, 0, imageData.Length);
        context.Response.ContentType = "image/JPEG";
    }
}

这是在ASP.NET中创建HttpHander的(长)resource that covers the concepts

此外,正如Joel所指出的那样,考虑一下字节数组的来源,因为HttpHandler的服务请求与页面完全不同。在最基本的层面上,这两个请求彼此不了解或共享任何数据。

此问题的常见解决方案是将图像数据放入缓存中:

Guid id = Guid.NewGuid();
HttpRuntime.Cache.Add(id.ToString(), imageData);

并将密钥传递给查询字符串中的HttpHandler,以便它可以从缓存中获取它:

<img src="/imagehandler.ashx?img=<%=id%>" />
<!-- will print ...ashx?img=42a96c06-c5dd-488c-906f-cf20663d0a43 -->

答案 2 :(得分:4)

您可以编写一个通用处理程序来提供图片:

<%@ 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; }
    }
}

然后在aspx页面中调用它:

<asp:Image ID="pic" runat="server" ImageUrl="~/Picture.ashx" />

答案 3 :(得分:2)

以下文章回答了您的问题:Auto-bind byte[] to asp:Image