2013-07-16 18 views
11

Io sono la conversione byte in un'immagine ma ottengo un erroreerrore "parametro non è valido" durante la conversione di byte in immagine

parametro non è valido

sto incollando il mio codice. Si prega di controllare il codice e suggerito che stavo facendo bene o male.

Image arr1 = byteArrayToImage(Bytess); 

Questa è la funzione.

public static Image byteArrayToImage(byte[] byteArrayIn) 
{ 
     if (null == byteArrayIn || byteArrayIn.Length == 0) 
      return null; 

     MemoryStream ms = new MemoryStream(byteArrayIn); 
     try 
      { 
      Process currentProcess1 = Process.GetCurrentProcess(); 
      Image returnImage = Image.FromStream(ms); 
      return returnImage; 
      } 
     catch (Exception ex) 
      { 
      MessageBox.Show(ex.Message); 
      } 
    } 

ho applicato molte tecniche e soluzioni, ma non ha funzionato per me

La vostra risposta sarebbe apprezzato.

Grazie

+0

Ho modificato. oOption.SelectedFile ha un byte –

+1

Ho visto che ... ha cancellato il mio commento originale ... Quindi quale riga lancia esattamente l'errore? Inoltre, il processo corrente1 non sembra essere usato per nulla (come nota a margine). –

+0

Image returnImage = Image.FromStream (ms); questa riga indica che il parametro non è valido –

risposta

8

provare questo

public Image byteArrayToImage(byte[] byteArrayIn) 
    { 

     System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter(); 
     Image img = (Image)converter.ConvertFrom(byteArrayIn); 

     return img; 
    } 
+0

No, non funziona. i miei byte sono 1120135 –

+0

Si prega di fornire il vostro array di byte .. –

+0

simili byte [] array = \t { \t 68, \t 111, \t 116, \t 32, \t 78, \t 101, \t 116, \t 32, \t 80, \t 101 , \t 114, \t 108, \t}; –

0

provare questo,

public Image byteArrayToImage(byte[] byteArrayIn) 
{ 
    Image returnImage = null; 
    using (MemoryStream ms = new MemoryStream(byteArrayIn))  
    { 
     returnImage = Image.FromStream(ms);  
    } 
    return returnImage; 
} 
+0

Mohan, stesso errore –

+0

Ciao Umair , Penso che il tuo valore byte [] non sia nel formato corretto. si pensi, per il controllo, si prende una immagine convertita in byte [] dopo che si passa questo valore di byte alla codifica sopra. Se sta convertendo l'immagine corretta significa che il problema è nel valore del byte. Sappiamo .. –

+0

avere lo stesso problema quando si scarica un'immagine da S3. Tuttavia, quando si utilizza il file prima del caricamento (dopo averlo inviato utilizzando un modulo) funziona senza problemi. Non riesco ancora a capirlo –

2

Dopo aver provato molte cose che ho trovato un modo che ha un po 'più di controllo. In questo esempio è possibile specificare il formato pixel e copiare i byte in una bitmap.

byte[] buffer = GetImageBytes(); 
var bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb); 
var bitmap_data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); 
Marshal.Copy(buffer, 0, bitmap_data.Scan0, buffer.Length); 
bitmap.UnlockBits(bitmap_data); 
var result = bitmap as Image; 
0
  cmd.CommandText="SELECT * FROM `form_backimg` WHERE ACTIVE=1"; 

      MySqlDataReader reader6= cmd.ExecuteReader(); 

      if(reader6.Read()) 
      { 
       code4 = (byte[])reader6["BACK_IMG"]; //BLOB FIELD NAME BACK_IMG 
      } 
      reader6.Close(); 

      MemoryStream stream = new MemoryStream(code4); //code4 is a public byte[] defined on top        
      pictureBox3.Image = Image.FromStream(stream); 
0

Il problema è dovuto al fatto, si stanno portando in modo errato dal database. Provare a cambiare il vostro codice come questo:

while (registry.Read()) 
{ 
    byte[] image = (byte[])registry["Image"]; 
} 
0

Nel mio caso ho ottenuto l'errore dal momento che la mia stringa base64 aveva codifica sbagliata prima di chiamare Image.FromStream. Questo alla fine ha funzionato:

byte[] bytes = System.Convert.FromBase64String(base64ImageString); 

using (MemoryStream ms = new MemoryStream(bytes)) 
{ 
    var image = Image.FromStream(ms); 
    image.Save(filePath, System.Drawing.Imaging.ImageFormat.Png); 
}