2

我有两个功能:

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

            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;
            }

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

在后面的代码中,我想将函数 2 的返回值(类型为System.Drawing.Image )分配给类型为( System.Web.UI.WebControls.Image )的“image1”控件。

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

有没有办法做到这一点?

4

3 回答 3

4

看起来您只需要一种简单的方法将图像字节数组转换为图片。没问题。我找到了一篇对我帮助很大的文章。

    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 函数将其作为对象的内容。

于 2014-08-22T00:30:43.423 回答
3

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

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

看到这个问题

于 2012-05-14T20:07:59.570 回答
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;
}
于 2016-09-15T14:56:05.120 回答