2009-08-31 61 views
4

我有一個返回varbinary(max)類型數據的存儲過程。我想將這些數據轉換成圖像。如何從數據庫中讀取一個字節[]並將其轉換爲圖像?

但我有問題,該行:

public Image CargarAvatar(string login) 
     { 
      System.Object[] Args = new System.Object[1]; 
      Args[0] = login; 

      DataTable X = new DataTable(); 
      X = TraerDataTable("sp_CargarAvatarUsuario", Args); 

      byte[] ImagemByte = Convert.to (X.Rows[0][0].ToString()); 


      MemoryStream ms = new MemoryStream(); 
      Image returnImage = Image.FromStream(ms); 
      return returnImage; 
     } 

請幫幫忙! :D

回答

10

一個VARBINARY場返回爲一個字節數組,所以你只需要投它:

byte[] ImagemByte = (byte[])X.Rows[0][0]; 

然後使用數組創建內存流:

MemoryStream ms = new MemoryStream(ImagemByte); 
+0

經過無盡的努力,我只需要將字節數組傳遞到流中。 +1! – Haris 2014-12-23 13:26:39

0

我不確定在這種情況下將Int轉換爲byte [],因爲我在任何地方都看不到int。這當然是可以做到的,我只是在這種情況下看不到應用程序。

你有兩個真正的問題。一個是創建byte [],顯然你知道它不會編譯。第二個是將這些字節放入流中。

public Image CargarAvatar(string login) 
{ 
    System.Object[] Args = new System.Object[1]; 
    Args[0] = login; 

    DataTable X = TraerDataTable("sp_CargarAvatarUsuario", Args); // No need to create a new DataTable and overwrite it with the return value of TraerDataTable. One assignment will do. 

    byte[] ImagemByte = (byte[])X.Rows[0][0]; // If this is an Image in the database, then this is already a byte[] here and just needs to be casted like so.    

    MemoryStream ms = new MemoryStream(ImagemByte); // You need to pass the existing byte[] into the constructor of the stream so that it goes against the correct data 
    Image returnImage = Image.FromStream(ms); 

    return returnImage; 
} 
0

您正試圖從空的內存流創建圖像。通過字節數組作爲參數傳遞給將MemoryStream構造函數:

MemoryStream ms = new MemoryStream(ImagemByte); 
0

本作轉換圖像的字節數組,它可以插入到數據庫中,因爲它是:

public byte[] imageToByteArray(BitmapImage myimage) 
    { 
     MemoryStream ms = new MemoryStream(); 
     WriteableBitmap wb = new WriteableBitmap(myimage); 
     wb.SaveJpeg(ms, myimage.PixelWidth, myimage.PixelHeight, 0, 100); 
     byte[] imageBytes = ms.ToArray(); 
     return imageBytes; 
    } 

,這爲後面的方法:

public static BitmapImage ByteArraytoBitmap(Byte[] byteArray) 
    { 
     MemoryStream stream = new MemoryStream(byteArray); 
     BitmapImage bitmapImage = new BitmapImage(); 
     bitmapImage.SetSource(stream); 
     return bitmapImage; 
    } 
相關問題