C# 如何用C从字节数组显示web表单中的图像#

C# 如何用C从字节数组显示web表单中的图像#,c#,asp.net,webforms,C#,Asp.net,Webforms,这是我的代码,它所做的只是清除网页并绘制图像,所以表单的其余部分消失了!我需要显示表单中的图像 这是我的用户控件,用于显示图像: protected void Page_Load(object sender, EventArgs e) { if (Session["ObjHoteles"] == null) { Label1.Text = "Por favor, primero seleccione un hotel para d

这是我的代码,它所做的只是清除网页并绘制图像,所以表单的其余部分消失了!我需要显示表单中的图像

这是我的用户控件,用于显示图像:

protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["ObjHoteles"] == null)
        {
            Label1.Text = "Por favor, primero seleccione un hotel para desplegar las fotos.";
        }
        else
        {
            if (!IsPostBack)
            {
                List<Byte[]> ArrayFotos = new List<Byte[]>();
                string NombreDelHotel = "";

                Hoteles Hotel1 = (Hoteles)Session["ObjHoteles"];
                NombreDelHotel = Hotel1.NombreHotel;

                ArrayFotos = Persistencia.PersistenciaFotos.FotosDeHotel(NombreDelHotel);
                Session["CantFotos"] = ArrayFotos.Count();

                Byte[] Foto = ArrayFotos[0];

                Response.Buffer = true;
                Response.Clear();
                Response.ContentType = "image/jpeg";
                Response.Expires = 0;
                Response.BinaryWrite(Foto);
                Session["NumFoto"] = 0;
            }
            else
            {
                List<Byte[]> ArrayFotos = new List<Byte[]>();
                string NombreDelHotel = "";

                Hoteles Hotel1 = (Hoteles)Session["ObjHoteles"];
                NombreDelHotel = Hotel1.NombreHotel;

                ArrayFotos = Persistencia.PersistenciaFotos.FotosDeHotel(NombreDelHotel);
                Session["CantFotos"] = ArrayFotos.Count();

                Byte[] Foto = ArrayFotos[(int)Session["NumFoto"]];

                Response.Buffer = true;
                Response.Clear();
                Response.ContentType = "image/jpeg";
                Response.Expires = 0;
                Response.BinaryWrite(Foto);

            }
        }
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(会话[“ObjHoteles”]==null)
{
Label1.Text=“请帮忙,普莱梅罗·塞莱奇奥尼酒店(primero seleccione un hotel para desplegar las fotos)。”;
}
其他的
{
如果(!IsPostBack)
{
List ArrayFotos=新列表();
字符串NombreDelHotel=“”;
Hoteles Hotel1=(Hoteles)会话[“ObjHoteles”];
NombreDelHotel=Hotel1.NombreDelHotel;
ArrayFotos=Persistencia.PersistenciaFotos.FotosDeHotel(诺姆布雷德酒店);
会话[“CantFotos”]=ArrayFotos.Count();
字节[]Foto=ArrayFotos[0];
Response.Buffer=true;
Response.Clear();
Response.ContentType=“image/jpeg”;
Response.Expires=0;
响应。二进制写入(Foto);
会话[“NumFoto”]=0;
}
其他的
{
List ArrayFotos=新列表();
字符串NombreDelHotel=“”;
Hoteles Hotel1=(Hoteles)会话[“ObjHoteles”];
NombreDelHotel=Hotel1.NombreDelHotel;
ArrayFotos=Persistencia.PersistenciaFotos.FotosDeHotel(诺姆布雷德酒店);
会话[“CantFotos”]=ArrayFotos.Count();
字节[]Foto=ArrayFotos[(int)Session[“NumFoto”];
Response.Buffer=true;
Response.Clear();
Response.ContentType=“image/jpeg”;
Response.Expires=0;
响应。二进制写入(Foto);
}
}
我需要找到一种不清除所有页面的方法,只需在用户控件内绘制图像。

Response.clear();
删除所有缓冲内容(即页面中的所有内容)

代替用户控件来显示动态图像,请考虑HTTP处理程序(<代码> .ASHX),像这样:

ImageHandler.ashx:

public class ImageHandler : System.Web.IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // Logic to get byte array here
        byte[] buffer = WhateverLogicNeeded;
        context.Response.ContentType = "image/jpeg";
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);
    }

    public bool IsReusable
    {
        get { return false; }
    }
}
然后在
.aspx
页面中:

<asp:Image ID="image1" runat="server" ImageUrl="~/ImageHandler.ashx" />
<asp:Image id="Image1" runat="server"></asp:Image>


注意:如果您想要一个特定的图像,那么您可以将一个查询字符串(即图像ID)传递给处理程序,并使用字节数组逻辑帐户来使用查询字符串值。

您可以编写一个page.aspx或handler maybe.ashx,将图片的内容发送回浏览器。您可以在url中传递信息。 然后使用带有html标记或html控件的此页面的url来显示它

编辑: 您需要使用控件。您可以将二进制数据转换为base64并将内容输出到html页面

我给您举一个带有img html标记的示例:

<img alt="" src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAsMAAAGhCAIAAAALOi7ZAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QgLEhM6PUSGrwAAIABJREFUeNq8vcuSLEmWHKZ6jnlEZt5761Z3T/eAHAICAYRcEALsuOCWPzbzDfwP/gKXWJACoRDCBSkEBgPhADKY7qnu+4wIdztHuThmHh55q2t6ho+SlpaqyMwID3ez89CjqsY//dM//bM/+zMc/pGE3//PT/z09/1I0t/1Rz/x+o9+0I++vv/n8fU/8MW/9U9+9JVvL/v/u1cy86cv5ttfePXKq//8fTfhp+/qT3/oq8v+6V/+Ay/v25/+4X/46nqO"/>
要从C#转换为base64,您可以使用:

using System;
以及:


还有另一个简单的方法:

  • .aspx
    页面上:

    <asp:Image ID="image1" runat="server" ImageUrl="~/ImageHandler.ashx" />
    
    <asp:Image id="Image1" runat="server"></asp:Image>
    

  • 嗨,Karl,谢谢你的回答!我的客户特别要求我使用用户控件!嗨,我的客户要求我使用用户控件。你能解释一下如何使用CSS和base64数据吗?这对Internet Explorer 7和更早版本不起作用,因为数据URI方案根本不受支持,并且在Internet Explorer中的支持有限er 8;阅读以了解更多信息。我在将图像从字节数组转换为base64字符串后尝试了此操作。直到删除尾随的“2Q==”才起作用从base64字符串的末尾开始,就可以了。嗯。请修改您的问题,以便它将列出使用用户控件来实现这一点的具体要求。这是由您的客户根据我在您的评论中看到的内容提出的。将此用于我的web应用程序,效果不错。我不会像前面提到的那样对IE7和下面的内容太过担心以前的评论。大多数用户将拥有IE8及以上版本或chrome/firefox等。现在大多数人使用最新版本的可用浏览器。Shire+1
    Image1.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(Foto)