2013-07-16 39 views
11

我轉換成字節的圖像,但我得到一個錯誤錯誤「參數無效」,而轉換成字節的圖像

參數無效

我貼我的代碼。請檢查代碼並建議我做對或錯。

Image arr1 = byteArrayToImage(Bytess); 

這是函數。

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); 
      } 
    } 

我應用了許多技術和解決方案,但它並沒有爲我

你的回答將不勝感激工作。

感謝

+0

我編輯它。 oOption.SelectedFile有一個字節 –

+1

我看到了......刪除了我的原始評論......那麼,究竟哪一行會拋出錯誤呢?另外,currentProcess1似乎沒有用於任何事情(作爲附註)。 –

+0

Image returnImage = Image.FromStream(ms);此行給出參數無效的錯誤 –

回答

8

試試這個

public Image byteArrayToImage(byte[] byteArrayIn) 
    { 

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

     return img; 
    } 
+0

不,它沒有工作。我的字節是1120135 –

+0

請提供您的字節數組.. –

+0

這樣byte []數組= \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

試試這個,

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

Mohan,同樣的錯誤 –

+0

嗨Umair ,我認爲你的byte []值格式不正確。做一個想法,對於檢查將該圖像轉換爲字節[]後,將該字節值傳遞給上述編碼。如果它轉換正確的圖像意味着你的字節值的問題。讓我們知道..從S3下載圖像時, –

+0

具有相同的問題。但是,在上傳之前使用文件時(使用表單提交後),它的工作沒有問題。仍然無法弄清楚這一點 –

2

嘗試很多東西,我發現其中有一點點的控制的一種方式後。 在此示例中,您可以指定像素格式並將字節複製到位圖。

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

的問題是,因爲你是從數據庫中把它正確。試着改變你這樣的代碼:

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

在我來說,我得到的錯誤,因爲我的base64字符串調用Image.FromStream收到了錯誤的編碼。 這對我來說最後:

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); 
}