2

I have two functions:

Function 1: ImageToByteArray: Is used to Convert an Image into a Byte Array and then Store in an Oracle Database, in a BLOB Field.

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

Function 2: ByteArrayToImage: Is used to Convert a Byte Array from the Database into an Image:

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

In my Markup I have an Imgage Control: <asp:Image ID="Image1" runat="server" />

In the Code Behind I want to Assign the Returned Value from Function 2 to (which is of type System.Drawing.Image) to the "image1" control which is of type (System.Web.UI.WebControls.Image).

Obviously I can't just assign: image1 = ByteArrayToImage(byteArray); because I'd get the following error: Cannot implicitly convert type 'System.Drawing.Image' to 'System.Web.UI.WebControls.Image'

Is there anyway to do this?

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 に答える