2011-08-18 40 views
1

我已經完成了這個用於將gridview中的一列中的數組字節轉換爲system.drawing.image在此行中出現錯誤將array的字節轉換爲image時,argumentException是未處理的錯誤

Image returnImage = Image.FromStream(ms);   

       argumentexception was unhandled 
       Parameter is not valid. 

,代碼如下

private byte[] objtoarray(object obj) 
{   
    if (obj == null) 
     return null; 

    BinaryFormatter bf = new BinaryFormatter(); 
    MemoryStream ms = new MemoryStream(); 
    bf.Serialize(ms, obj); 

    return ms.ToArray(); 

} 

public Image bytearraytoimage(byte[] bytearray) 
{ 
    MemoryStream ms = new MemoryStream(bytearray,0,bytearray.Length); 

    Image returnImage = Image.FromStream(ms); 
    return returnImage; 

} 

private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e) 
{ 
    byte[] bits = null; 
    Image img = null; 

    if (e.ColumnIndex != productgridview.Columns["productimage"].Index) return; 

    if (productgridview.SelectedCells.Count == 0) return; 

    object selectedValue = productgridview.SelectedCells[0].Value; 
    bits= objtoarray(selectedValue); 
    img = bytearraytoimage(bits); 

    if (img is Image) 
    { 
     // Forms are IDisposable, so use them embedded in a using statement. 
     using (ProductDescriptionForm pf = new ProductDescriptionForm()) 
     { 
      pf.picture = (Image)selectedValue; 
      pf.ShowDialog(this); 
     } 
    }  
} 

回答

0

docs狀態的ArgumentException可籌集:

The stream does not have a valid image format 
-or- 
stream is null. 

那麼既然objtoarray可以返回null,是productgridview.SelectedCells[0].Value null還是無效值?

object selectedValue = productgridview.SelectedCells[0].Value; 
    bits= objtoarray(selectedValue); 
+0

Image returnImage = Image.FromStream(ms);我已經看到selectedValue的值是這樣的「byte [40678]」 –

+0

我得到了這個語句的值,像這個對象selectedValue = productgridview.SelectedCells [0] .Value;在這個語句之後,選擇的值就像是這個字節[44899] ....我是否在做任何錯誤的事情.... –

+0

thanq彼得來自網格視圖的數據也是數組的字節,因此不需要再次轉換成字節陣列....我犯了一個錯誤..現在它的工作很好..... –

相關問題