Come posso convertire Sistema.Byte[] per Immagine? (C# windows forms)

Ho un PictureBox di controllo che si desidera visualizzare un’immagine. Ho salvato le immagini in un database di MS Access con questo tipo di dati: OLE Object.
Faccio fatica a visualizzare di nuovo. Si prega di dare un’occhiata al mio codice, e può voi ragazzi siete pregati di escogitare una soluzione per esso. Ho ottenuto questo Exception:

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

Ecco il mio codice:

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"];
            }
InformationsquelleAutor yonan2236 | 2010-08-09

 

One Reply
  1. 28

    Il modo più semplice è quello di utilizzare un MemoryStream e chiamare Image.FromStream:

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

    EDIT: Se si esegue il backup contro il problema descritto da Hans, che, fondamentalmente, è necessario rimuovere l’intestazione. Una volta hanno avuto un array di byte con solo i dati dell’immagine, utilizzare il codice di cui sopra.

    • grazie mille… : )
    • Non funziona, viene aggiunto un header che i dati di immagine.
    • Ma io non la fine PictureBox Opzione ?? si prega di aiutare
    • Non so cosa vuoi dire. Nel contesto della domanda, l’OP ha un pictureBox1 variabile. Non ho idea di che cosa stai cercando di fare o di contesto. Vi suggerisco di fare una nuova domanda.
    • Non ci circondano MemoryStream da using o almeno smaltire l’istanza, dopo aver impostato il controllo immagine?
    • È non deve smaltire – Image.FromStream si assume la proprietà di flusso. Di smaltimento, l’immagine di smaltire il flusso, ma per un MemoryStream non importa comunque.

Lascia un commento