【问题标题】:asp.net display image from byte arrayasp.net 从字节数组显示图像
【发布时间】:2017-01-13 06:47:19
【问题描述】:

我有一个字节数组并试图从中显示图像。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Linq;

namespace RealPortableTerminal
{
public partial class resim : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        PortableTerminalDbEntities entity = new PortableTerminalDbEntities();
        byte[] arr = (from b in entity.Sicil where b.Id == 31 select b.Fotograf).First();

        Image rImage = null;
        using (MemoryStream ms = new MemoryStream(arr))
        {
            rImage = Image.FromStream(ms);
        }
    }
}
}

它在 FromStream 下划线并说“System.Web.UI.WebControls.Image”不包含“FromStream”的定义。似乎添加 System.Data.Linq 引用并没有改变任何东西。我错过了什么吗?顺便说一句,我很确定我正确地从数据库中获取字节数组。

【问题讨论】:

    标签: c# asp.net image linq


    【解决方案1】:

    你可能在想System.Drawing.Image;该类支持FromStream

    This forum post 向您展示了在 WebForms 中加载动态图像的几种方法。

    可能最简单的方法是创建一个单独的 aspx 页面,该页面像您在此处所做的那样加载您的图像,并使用 Response.BinaryWrite 将其保存到响应流中,然后在您正在处理的页面中创建一个Image 控件使用新的 aspx 页面作为其图像 URL。如果需要加载各种图片,当然可以使用查询字符串参数。

    【讨论】:

    • 您不应该为此使用 ASPX 页面。这些是用于 Web 表单页面的,将它们用于此类事情是很糟糕的。为此,您可以编写处理程序或通用处理程序 (.ashx)。
    【解决方案2】:

    另一种方法是将字节数组转换为 64 进制字符串并将其分配给 rImageImageUrl 属性,如下所示:

    rImage.ImageUrl = "data:image;base64," + Convert.ToBase64String(arr);
    

    您不需要中间MemoryStream 或单独的页面...如果字节数组是浏览器支持的图像格式,它将显示。祝你好运。

    【讨论】:

      【解决方案3】:
      <img id="img" runat="server" alt=""/>
      

      在后面的代码中

      string base64String = Convert.ToBase64String(arr, 0, arr.Length);
      img.Src = "data:image/jpg;base64," + base64String;
      

      您不需要MemoryStream

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-07
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 2021-04-12
        • 1970-01-01
        相关资源
        最近更新 更多