2014-07-07 35 views
1

我使用當該語句執行下面的錯誤顯示「參數是無效」誤差變換字節數組轉換爲System.Drawing.Image

I C#4.5框架和MySql

MySqlDataReader reader = Command.ExecuteReader(); 

if (reader.Read()) 
{ 

    byte[] ReturnImage = reader["Photo"] as byte[]; 

    MemoryStream ms = new MemoryStream(ReturnImage); 

    Image Photo = Image.FromStream(ms); //Error is in this statement!! 
} 

無法從網絡上找到答案..有人請幫助..

+1

什麼是'讀者',你確定它是一個字節數組嗎? – Sayse

+0

@Sayse如果它不是'byte []',我希望第一行返回一個'null',因此第二行拋出一個'ArgumentNullException' –

+0

你怎麼會** **店這裏的數據含義:?什麼是二進制內容,你確定它真的是一個原始的,但完好,圖像 –

回答

1

這裏最可能的原因是longblob的內容是而不是原始圖像字節。而不是圍繞圈子,首先要做的是:比較他們。例如,你說(評論)數據來自jpg文件,通過OpenFileDialog。在這種情況下,比較它們。檢查您是否已成功存儲和檢索圖像。

讓我們假設有問題的文件是c:\Some\Photo.jpg - 儲存等每任何處理。在這種情況下,你應該能夠檢查內容是否相同。直到以下報告成功,全盤皆輸

byte[] original = File.ReadAllBytes(@"c:\Some\Photo.jpg"); 
byte[] ReturnImage = reader["Photo"] as byte[]; 

if(Convert.ToBase64String(original) == Convert.ToBase64String(ReturnImage)) { 
    Console.WriteLine("Success; the contents match"); 
} else { 
    Console.WriteLine("Failure; the contents are different"); 
} 

如果該報告「失敗,內容是不同的」,那麼,錯誤是最有可能的一個:

  • 代碼準備要存儲的映像的位置(填充參數等)
  • 執行存儲的存儲過程
  • 將數據從數據庫中取回的代碼

如果該報告「成功;內容匹配「:當時和是看試圖加載Image代碼有意義的。在這種情況下,假設c:\Some\Photo.jpg負荷在其他大多數圖像加載工具。(」漆」等) - 再它是可能Image不認子格式,但我的猜測是,它會說「失敗。內容是不同的。」

注意Convert.ToBase64String這裏僅作爲一個懶惰的方法來檢查二進制等效性。在生產代碼中你不會使用這樣的,但它是精於此目的。

相關問題