2011-03-25 46 views
1

我有一個表格,其中存儲了圖片,並且在加載表單時我檢索到的數據和數據在System.Byte []中。將System.Byte []轉換爲圖像並以winform形式顯示在picturebox中

我希望這個以窗口形式顯示在圖片框中。 我使用C#語言和SQL Server 2005

我的代碼是這樣的:

  Byte[] byteBLOBData = (Byte[])(dt.Rows[count]["stud_photo"]); 
      MemoryStream ms = new MemoryStream(byteBLOBData); 
      ms.Write(byteBLOBData, 0, byteBLOBData.Length); 

      photo.Image = Image.FromStream(ms); --- here i am having an error "Parameter not valid" 

請誰能幫我...它非常重要的,我的項目。謝謝你在前進

+0

可能與:http://stackoverflow.com/questions/3353860/byte-to-gray-scale-bitmapimage – 2011-03-25 10:36:16

+0

什麼是'photo'? – user1509 2012-11-27 09:20:48

回答

3

集流位置回開始

ms.Write(byteBLOBData, 0, byteBLOBData.Length); 
ms.Position = 0; // THIS !!!!! 
photo.Image = Image.FromStream(ms); 

的問題是流位置是在年底,所以當圖像嘗試讀取它,它會讀取零字節

+0

-1:通過將'byte []'傳遞給'MemoryStream'的構造函數,'ms'已經擁有了所有的信息。 「Write(...)」是不必要的,或者應該使用無參數構造函數或容量創建「MemoryStream」。從您的示例中省略「MemoryStream」的創建意味着OP的使用,這是一種不太理想的解決方案。 – 2012-01-22 01:38:45

3
MemoryStream ms = new MemoryStream(byteBLOBData); 

位置確實是你的問題。但是,構造函數已經初始化了內存流,您不必調用Write()。只要刪除它,位置也可以。

3
you need to remove the header of an image and then get the image data and add the code below to return image after only getting image data. 

public Image byteArrayToImage(byte[] byteBLOBData) 
{ 
    MemoryStream ms = new MemoryStream(byteBLOBData); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 
1
SqlConnection cnn = new SqlConnection(connetionString); 
SqlCommand cmd = new SqlCommand(Query, cnn); 

MemoryStream stream = new MemoryStream(); 
cnn.Open(); 

byte[] image = (byte[])cmd.ExecuteScalar(); 
stream.Write(image, 0, image.Length); 
cnn.Close(); 

Bitmap bitmap = new Bitmap(stream); 
pictureBox1.Image = bitmap; 
相關問題