2011-09-12 15 views
10

Ho dati binari di un'immagine nel mio database e voglio visualizzarli in un controllo immagine in ASP.NET. Come? Se è impossibile, trova un altro modo per salvarlo nel database e visualizzarlo in un controllo immagine.Conversione da dati binari a controllo immagine in ASP.NET

+2

Date un'occhiata alla risposta a questa domanda simile: http://stackoverflow.com/questions/6987433/display-image-from-database-in-asp-net-with-c – IrishChieftain

+0

o questo: http://stackoverflow.com/q/612342/76051 – Carsten

risposta

29

Creare un normale elemento HTML img in questo modo:

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

E in code behind fare questo:

image.src = "data:image/png;base64," + Convert.ToBase64String(imageBytes); 

Dove imageBytes è un byte[] .

Hai finito. L'immagine verrà visualizzata.

+0

Questo è di gran lunga il modo più semplice per visualizzare immagini binarie finora. MA ho trovato che questo metodo funziona solo con le immagini jpg. Ho provato questo con le immagini PNG ma non ha funzionato. – Arbaaz

+0

Il metodo funziona su jpg e png finché il browser lo supporta. Può darsi che il tuo browser non lo supporti o che la loro implementazione sia bacata. – Icarus

+0

Puoi spiegare per favore 'data: image/png; base64'? – Arbaaz

1

In un gestore generico (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); 


        } 
4

Molto probabilmente l'immagine viene memorizzato come un array di byte nel database. Se è così, allora è possibile utilizzare questo:

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; 
} 
1
public Byte[] Ret_image(Int32 id) 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "select * from tbimage where [email protected]"; 
    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; 
} 
1
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";   
} 

Utilizzare questo evento per il pulsante click per recuperare immagine e chiamare il metodo Ret_Image qui.

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

È tutto quello che ho fatto! Divertirsi –