2010-08-09 16 views
7

Tengo un control PictureBox Quiero mostrar una imagen en él. Guardé mis imágenes en una base de datos de MS Access con este tipo de datos: OLE Object. Me resulta difícil volver a mostrarlo. Por favor, eche un vistazo a mi código, y pueden ustedes por favor idear una solución para ello. Tengo este Exception:¿Cómo puedo convertir System.Byte [] en Image? (Formas de ventana C#)

Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Image'. 

Aquí está mi código:

OleDbCommand cmd = new OleDbCommand("SELECT IMAGE FROM IMAGES WHERE ID = 1", myConn)); 
      cmd.CommandType = CommandType.Text; 
      OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
      DataTable dt = new DataTable("dt"); 
      da.Fill(dt); 

      if (dt != null) 
      {    
       pictureBox1.Image = (Image)dt.Rows[0]["IMAGE"]; 
      } 

Respuesta

28

La forma más sencilla es utilizar un MemoryStream y llame Image.FromStream:

byte[] data = (byte[]) dt.Rows[0]["IMAGE"]; 
MemoryStream ms = new MemoryStream(data); 
pictureBox1.Image = Image.FromStream(ms); 

EDIT: Si ejecuta contra la problema descrito por Hans, básicamente necesitas quitar ese encabezado. Una vez que tiene tiene una matriz de bytes con solo los datos de la imagen, utilice el código anterior.

+0

muchas gracias ...:) – yonan2236

+1

No funciona, Access agrega un encabezado a los datos de la imagen. –

+0

¿Pero no muerdo la opción de PictureBox? por favor ayuda – SanamShaikh

Cuestiones relacionadas