C# 在图像控件中显示字节[]

C# 在图像控件中显示字节[],c#,sql,asp.net,image,C#,Sql,Asp.net,Image,因此,我从存储图像的数据库中收集varbinary(MAX)值。 它被转换为字节[],然后目标是在图像控件中显示它 这是我从数据库中读取数据的地方 public TemplateData(SqlDataReader dr) { initialiseData(); if (dr.HasRows) { Logo = (byte[])dr["Logo"]; //Logo = dr

因此,我从存储图像的数据库中收集varbinary(MAX)值。 它被转换为字节[],然后目标是在图像控件中显示它

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

        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;
            }
因此,现在我将一个字节[]传递到一个图像控件的源代码中,它将改为一个字符串。我曾尝试使用
Convert.ToBase64String(Logo)
ToString(Logo)
将其转换为字符串,但这些都不起作用


非常感谢您的帮助。大家好。

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

        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)
        {
        }

希望有帮助。

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

您要研究的是Response.BinaryWrite。有关这方面的更多信息,请参见:

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

我的建议是将徽标作为字节[]存储到http会话中。将图像源放入httphandler yourgonacreate.ashx。然后,您可以将存储在那里的字节[]二进制写入会话

希望这有帮助

如Michael所示,您可以使用以下内容将字节数组转换为
位图
对象:

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

现在还不完全清楚控件显示图像所用的是什么,但是任何可以显示图像的控件都应该能够获取
位图
图像
对象。

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