【问题标题】:Displaying a byte[] in an image control在图像控件中显示 byte[]
【发布时间】:2015-08-03 03:21:18
【问题描述】:

所以我从存储图像的数据库中收集了一个 varbinary(MAX) 值。 它被转换为 byte[],然后目的是在图像控件中显示它。

这是我从数据库中读取的地方

        public TemplateData(SqlDataReader dr)
    {
        initialiseData();
        if (dr.HasRows)
        {

            Logo = (byte[])dr["Logo"];

            //Logo = dr["Logo"].ToString();
            TemplateId = dr["TemplateId"].ToString();
            Comment = dr["Comment"].ToString();
            SchemeCode = dr["SchemeCode"].ToString();
            Version = dr["Version"].ToString();
        }
    }

这是值显示在相应控件中的位置

        protected void ddSchemeCode_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddSchemeCode.SelectedIndex > 0)
        {
            // Existing Data to load from database
            TemplateData temp = DataClass.ReturnData(ddSchemeCode.SelectedItem.Text);
            if (temp != null)
            {
                txtVersion.Text = temp.Version;
                txtComment.Text = temp.Comment;
                txtSchemeCode.Text = temp.SchemeCode;
                txtTemplateId.Text = temp.TemplateId;
                img.Src = temp.Logo;
            }

所以目前我将一个 byte[] 传递到一个图像控件的源中,它会改为一个字符串。我尝试使用Convert.ToBase64String(Logo) 和ToString(Logo) 将其转换为字符串,但这些都不起作用。

非常感谢任何帮助。男女老少干杯。

【问题讨论】:

  • 是的,很抱歉应该提到。
  • 是的,这让它变得更加棘手。如果图像足够小,您可以在现代浏览器中使用Convert.ToBase64String(您只需使用数据URI 方案,例如data:image/png;base64,TheActualBase64String 用于PNG)。如果这不合理,您将必须有一个单独的请求来加载图像,这意味着要么将图像保存在磁盘上,要么有一个 HttpHandler 来返回实际的图像数据——当然,它通常必须请求再次从服务器获取数据(或者您必须将其保存在 Session 中,但这也很棘手)。
  • 对不起,伙计们,原来它们是旧对象,所以无论如何我都无法像这样显示它们:¬ |为你的努力干杯!

标签: c# sql asp.net image


【解决方案1】:

尝试将字节数组转换为图像并将其分配给图片框,如下所示,

        try
        {
            using (MemoryStream mStream = new MemoryStream())
            {
                // where pData is your byte array
                mStream.Write(pData, 0, Convert.ToInt32(pData.Length));
                Image originalImage = Image.FromStream(mStream);
                picBox.Image = originalImage;
            }
        }
        catch (Exception ex)
        {
        }

希望对你有帮助。

【讨论】:

    【解决方案2】:

    您可能已经注意到,您不能在网页中“打印”图像。你现在需要有点创意。

    您要查看的是 Response.BinaryWrite。更多相关信息,请点击此处:https://msdn.microsoft.com/en-us/library/system.web.httpresponse.binarywrite%28v=vs.110%29.aspx

    您可能还需要一个通用的 ashx 处理程序。以下是如何使用处理程序显示图片的示例:http://www.dotnetperls.com/ashx

    我的建议是将徽标作为 byte[] 存储到 http 会话中。把图片的来源放到HttpHandlerYourGonnaCreate.ashx中。然后,您可以将存储的 byte[] 二进制写入会话中。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      正如 Michael 显示的 here,您可以将字节数组转换为 Bitmap 对象,如下所示:

      Bitmap bitmap = null;
      using (MemoryStream imageStream = new MemoryStream(imageData))
      {
          bitmap = new Bitmap(imageStream);
      }
      

      尚不清楚您使用什么控件来显示图像,但任何可以显示图像的控件都应该能够获取Bitmap 或Image 对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-26
        • 2014-11-06
        • 2017-02-18
        • 1970-01-01
        • 2013-12-23
        • 2019-06-01
        • 2012-07-05
        相关资源
        最近更新 更多