Convert from binary data to an image control in ASP.NET

I have binary data of an image in my database, and I want to display it in an image control in ASP.NET. How? If it is impossible, please find another way to save it in the database and display it in an image control.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Create a regular HTML img element like so:

<img runat="server" id="image" />

And in code behind do this:
image.src = "data:image/png;base64," + Convert.ToBase64String(imageBytes);

Where imageBytes is a byte[].

You are done. The image will be displayed.

Method 2

Most likely the image is being stored as a byte array in the database. If so, then you can use this:

public static System.Drawing.Image ByteArrayToImage(byte[] bArray)
{
    if (bArray == null)
        return null;

    System.Drawing.Image newImage;

    try
    {
        using (MemoryStream ms = new MemoryStream(bArray, 0, bArray.Length))
        {
            ms.Write(bArray, 0, bArray.Length);
            newImage = System.Drawing.Image.FromStream(ms, true);
        }
    }
    catch (Exception ex)
    {
        newImage = null;

        //Log an error here
    }

    return newImage;
}

Method 3

public Byte[] Ret_image(Int32 id)
{
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "select * from tbimage where <a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dfb6b2beb8bab6bbe29fb6bb">[email protected]</a>";
    cmd.Connection = con;
    cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;
    SqlDataReader dr = cmd.ExecuteReader();
    dr.Read();
    Byte[] ar = (Byte[])(dr[1]);
    dr.Close();
    cmd.Dispose();
    return ar;
}

Method 4

protected void Button2_Click(object sender, EventArgs e)
{
    Byte[] ar = Ret_image(Convert.ToInt32(TextBox2.Text));
    String st = Server.MapPath("abc.jpg");
    FileStream fs = new FileStream(st, FileMode.Create, FileAccess.Write);
    fs.Write(ar, 0, ar.Length);
    fs.Close();
    Image1.ImageUrl = "abc.jpg";           
}

Use this event for the button click to retrieve image and call the Ret_Image method here.

Method 5

In a generic handler (.ashx):

public class ImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        if(!string.IsNullOrEmpty(context.Request.QueryString["ImageId"]))
        {
           try
           {
                string ImageId = context.Request.QueryString["ImageId"].ToString(); 
                ImageDataModel idm = new ImageDataModel();
                byte[] ImageData = idm.getImageData(ImageId);
                context.Response.ContentType = "image/JPEG";
                context.Response.OutputStream.Write(ImageData, 0, ImageData.Length); 
            }
            catch(Exception ex){}
        }
    }

}

Method 6

SqlConnection con = new SqlConnection();
string _path;
Using SYstem.IO;
Using System.Data.SQLClient;

//convert Image to binary and save in DB

private void button1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        _path = openFileDialog1.FileName;
        InsertInSQL(_path);
    }
}

private void InsertInSQL(string _path)
{
    con.ConnectionString = Pic.Properties.Settings.Default.ConnectionS;
    string strQ = "insert into dbo.PicTBL(Pic)values(@p)";
    SqlCommand command = new SqlCommand(strQ,con);
    command.Parameters.AddWithValue("@p",ImageToBinary(_path));
    con.Open();
    command.ExecuteNonQuery();
    con.Close();
}      

public static byte[] ImageToBinary(string _path)
{
    FileStream fS = new FileStream(_path, FileMode.Open, FileAccess.Read);
    byte[] b = new byte[fS.Length];
    fS.Read(b, 0, (int)fS.Length);
    fS.Close();
    return b;
}

//Convert Binary to imge and save in a folder
private void button1_Click_1(object sender, EventArgs e)
{
    DataTable dt = Rimage();
    foreach (DataRow row in dt.Rows)
    {
        byte[] b = (byte[])row["Pic"];
        Image img = BinaryToImage(b);
        img.Save("D:\NewFolder\" + row["ID"].ToString() + ".jpg");
    }
}

private Image BinaryToImage(byte[] b)
{
    if (b == null) 
        return null;

    MemoryStream memStream = new MemoryStream();
    memStream.Write(b, 0, b.Length);

    return Image.FromStream(memStream);
}

private DataTable Rimage()
{
    con.ConnectionString = Pic.Properties.Settings.Default.ConnectionS;
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "select * from dbo.PicTBL";
    cmd.Connection = con;
    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    con.Open();
    adp.Fill(dt);

    return dt;
}


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x