如何将'System.Drawing.Image'添加到'System.Web.UI.WebControls.Image'

时间:2012-05-14 19:47:43

标签: asp.net image oracle byte blob

我有两个功能:

功能1:ImageToByteArray:用于将图像转换为字节数组,然后在BLOB字段中存储在Oracle数据库中。

            public byte[] ImageToByteArray(string sPath)
            {
                byte[] data = null;
                FileInfo fInfo = new FileInfo(sPath);
                long numBytes = fInfo.Length;
                FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fStream);
                data = br.ReadBytes((int)numBytes);
                return data;
            }

功能2:ByteArrayToImage:用于将字节数组从数据库转换为图像:

           public System.Drawing.Image ByteArrayToImage(byte[] byteArray)
            {
                MemoryStream img = new MemoryStream(byteArray);
                System.Drawing.Image returnImage = System.Drawing.Image.FromStream(img);
                return returnImage;
            }

在我的标记中,我有一个Imgage控件: <asp:Image ID="Image1" runat="server" />

在Code Behind中我想将函数2的返回值分配给( System.Drawing.Image 类型)到“image1”控件的类型( System.Web.UI.WebControls.Image )。

显然我不能只指定: image1 = ByteArrayToImage(byteArray); 因为我收到以下错误:无法将类型'System.Drawing.Image'隐式转换为'System.Web.UI.WebControls.Image'

有没有这样做?

3 个答案:

答案 0 :(得分:3)

你做不到。 WebControls.Image只是图像URL的HTML容器 - 您无法将图像数据直接存储在其中,只需将引用(url)存储到图像文件中。

如果您需要动态检索图像数据,通常的方法是创建一个处理请求的图像处理程序,并将图像作为浏览器可以显示的流返回。

请参阅此question

答案 1 :(得分:2)

看起来你只想要一个简单的方法将图像字节数组转换成图片。没问题。我发现article给了我很多帮助。

    System.Web.UI.WebControls.Image image = (System.Web.UI.WebControls.Image)e.Item.FindControl("image");

    if (!String.IsNullOrEmpty(currentAd.PictureFileName))
    {
        image.ImageUrl = GetImage(currentAd.PictureFileContents);
    }
    else
    {
        image.Visible = false;
    }

    //The actual converting function
    public string GetImage(object img)
    {
        return "data:image/jpg;base64," + Convert.ToBase64String((byte[])img);
    }

PictureFileContents是一个Byte [],它是GetImage作为对象的函数。

答案 2 :(得分:0)

我认为这是可能的,我希望它有所帮助。我的解决方案是:

public System.Web.UI.WebControls.Image HexStringToWebControlImage(string hexString)
{
    var imageAsString = HexString2Bytes(hexString);

    MemoryStream ms = new MemoryStream();
    ms.Write(imageAsString, 0, imageAsString.Length);

    if (imageAsString.Length > 0)
    {
        var base64Data = Convert.ToBase64String(ms.ToArray());
        return new System.Web.UI.WebControls.Image
        {
            ImageUrl = "data:image/jpg;base64," + base64Data
        };
    }
    else
    {
        return null;
    }
}

public byte[] HexString2Bytes(string hexString)
{
    int bytesCount = (hexString.Length) / 2;
    byte[] bytes = new byte[bytesCount];
    for (int x = 0; x < bytesCount; ++x)
    {
        bytes[x] = Convert.ToByte(hexString.Substring(x * 2, 2), 16);
    }

    return bytes;
}