2013-09-05 63 views
0

可以請任何人告訴我如何從C#中的(DB)VarBinary(Max)數據類型列構建圖像。我也想改變它的類型並將其保存到硬盤上的物理路徑中。如何從VarBinary(Max)構建圖像,更改其類型並存儲到物理位置

很多人發佈了類似問題的答案,但找不到符合我上述標準的適當答案。

任何人的幫助將真正被讚賞。

親切的問候

+0

顯示取回代碼嗎?你有圖像作爲一個字節[]? – stevepkr84

+0

byte [] imagedata = ds.Tables [0] .Rows [0] [「Data」] as byte []; // Data是VarBinary(max)類型的數據列。數據庫中存儲的圖像類型是JPEG,我希望在保存到物理路徑之前將其轉換爲PNG。 –

+0

假設您想將jpg保存爲c:\ img.jpg,請嘗試:使用(var fs = new FileStream(「c:\\ img.jpg」,FileMode.Create)) { fs.Write(imageData, 0,imageData.Length); fs.Close(); } – jbl

回答

1

首先把你的byte []對位圖:

// Turn the binary into an image 
    TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap)); 
    Bitmap myImage = (Bitmap)tc.ConvertFrom(imagedata); 

然後保存到磁盤:

 myImage.save("file.png", ImageFormat.Png); 

任何問題,讓我知道,這對我的作品。

編輯:你需要使用System.ComponentModel;在頂部。

EDIT2:位圖複製到新位圖,如果你得到了GDI錯誤:

Bitmap bm = new Bitmap(myImage); 
myImage.Dispose(); 
myImage = null; 
bm.save("file.png", ImageFormat.Png); 
+0

我收到「A通用錯誤發生在GDI +「,同時保存圖像 –

+0

奇怪我沒有問題。我做了第二次編輯,應該解決它。 – stevepkr84

+0

仍然沒有什麼不同。我甚至嘗試過使用語句,因爲有些人說你必須確保該文件在你試圖保存的時候沒有使用任何其他地方。但沒有區別 –

0

以下是我的回答從字節[]構建圖像並改變它的數據類型爲不同的格式。

  byte[] imagedata = dt.Rows[0]["Data"] as byte[]; 


     System.Drawing.Image newImage; 
     if (imagedata != null) 
     { 
      using (MemoryStream stream = new MemoryStream(imagedata)) 
      { 
       newImage = System.Drawing.Image.FromStream(stream); 
       newImage.Save("C:\\Users\\User\\Documents\\TestPictureConversion\\WebApplication2\\WebApplication2\\Images\\Test Image.png"); 
      } 
     } 

正如我已經改變了路徑圖像文件夾我的應用程序中,現在,它不產生錯誤「GDI +中發生一般性錯誤」了。 爲避免出現「GDI +中發生的一般錯誤」,請更改文件夾的權限或選擇在您的網絡上具有讀/寫權限的位置。

親切的問候

相關問題