2012-12-17 20 views
6

ciao voglio convertire binario arrey in bitmap e mostrare l'immagine in una picturebox scrivo seguendo il codice ma ottengo un'eccezione che dice che parametr non è valido.convertire binario in bitmap utilizzando il flusso di memoria

public static Bitmap ByteToImage(byte[] blob) 
    { 
     MemoryStream mStream = new MemoryStream(); 
     byte[] pData = blob; 
     mStream.Write(pData, 0, Convert.ToInt32(pData.Length)); 
     Bitmap bm = new Bitmap(mStream); 
     mStream.Dispose(); 
     return bm; 

    } 
+4

Perché si copia il vettore di byte? Perché non solo usare '(MemoryStream mStream = new MemoryStream (blob);) {return new Bitmap (mStream);}' –

+0

Vuoi convertire l'immagine nello stream e archiviarla nel database come varbinary? – Dev

+0

no voglio leggerlo da db e dsplay in picbox – heavy

risposta

7

tutto dipende da ciò che è in blob. È un formato bitmap valido (come PNG, BMP, GIF, ecc.). Se si tratta di informazioni di byte non elaborate relative ai pixel nella bitmap, non è possibile farlo in questo modo.

Potrebbe essere utile riavvolgere il flusso all'inizio utilizzando mStream.Seek(0, SeekOrigin.Begin) prima della riga Bitmap bm = new Bitmap(mStream);.

public static Bitmap ByteToImage(byte[] blob) 
{ 
    using (MemoryStream mStream = new MemoryStream()) 
    { 
     mStream.Write(blob, 0, blob.Length); 
     mStream.Seek(0, SeekOrigin.Begin); 

     Bitmap bm = new Bitmap(mStream); 
     return bm; 
    } 
} 
+1

Si prega di dare un'occhiata a [questa modifica rifiutata] (http://stackoverflow.com/review/suggested-edits/3181577). Da [msdn] (http://msdn.microsoft.com/en-us/library/system.io.memorystream.seek.aspx) sembra che abbia ragione. – gunr2171

4

Non smaltire il MemoryStream. Ora appartiene all'oggetto dell'immagine e verrà eliminato quando si smaltisce l'immagine.

Considera anche farlo in questo modo

var ms = new MemoryStream(blob); 
var img = Image.FromStream(ms); 
..... 
img.Dispose(); //once you are done with the image. 
+0

rintraccia il mio codice ottengo argumanexeptioninvalid a questo codice Bitmap bm = new Bitmap (mStream); – heavy

+0

@ user1512368 Quale linea? – juharr

+2

Questo non è vero! Lo stream e le informazioni sul byte non "appartengono all'oggetto dell'immagine". Lo stream * deve * essere eliminato per evitare perdite di memoria. –

0
System.IO.MemoryStream mStrm = new System.IO.MemoryStream(your byte array); 
Image im = Image.FromStream(mStrm); 
im.Save("image.bmp"); 

Prova questa. Se ricevi ancora errori o eccezioni; per favore pubblica i tuoi byte che stai cercando di convertire in immagine. Ci dovrebbe essere un problema nel flusso di immagini ....

+0

lo faccio anch'io ma ottengo parametro non valido eccezione – heavy

+0

Ok amico, puoi pubblicare i tuoi byte convertiti in stringa qui? –

+0

Come vengono immessi i byte dell'immagine nel database? Sei * veramente * sicuro che i byte nel database rappresentino un'immagine in formato PNG, GIF, BMP, ecc.? In caso contrario, non è possibile utilizzare il costruttore 'Bitmap'. –

0

Non sono sicuro che questo codice funzioni per te, ma puoi seguire le istruzioni come questa;

byte[] pData = blob; 
MemoryStream ms = new MemoryStream(pData); 
return Bitmap.FromResource(ms); 

Bitmap.FromResource da MSDN;

Crea una bitmap dalla risorsa Windows specificata.

Problemi correlati