2014-08-29 16 views
1

我有一個datatable設置爲datagrid(datagrid顯示數據表的幾列)的itemsource。除一個外,所有列都有文本,最後一列將圖像保存爲字節數組。 圖片列被綁定到圖片控件,該控件顯示數據網格中選定行的圖片。 數據表保存的映像可以從磁盤位置或數據庫收集。最終,它們將全部保存在數據庫中。旋轉數據表中的圖像(字節數組)

我有一個按鈕,其中應該順時針旋轉顯示的圖像90°,然後再次保存(作爲字節數組)在同一行(和列)的數據表中。

我嘗試了一種方法來做到這一點,但沒有任何運氣。 有人可以幫我旋轉和保存這張照片嗎?

+9

您能告訴我們您試過的kazillion方法嗎? – 2014-08-29 14:02:18

回答

2

未經測試,但應該做的伎倆(可能是必要的圖像加載到一個位圖)

using (var memoryStream = new MemoryStream(byteArray)) 
{ 
    var rotateImage = Image.FromStream(memoryStream); 
    rotateImage.RotateFlip(RotateFlipType.Rotate90FlipNone); 
    rotateImage.Save(memoryStream, rotateImage.RawFormat); 
    byteArray = memoryStream.ToArray(); 
} 

編輯:由於某種原因,我忘了回保存圖片到流...固定的

+0

嗨,我試圖按照你的建議做,但是當我在做「rotateImage.Save(memoryStream,rotateImage.RawFormat」)時,我得到一個異常說:「在System.Drawing.dll mais中發生了類型'System.ArugmentNullException'的異常沒有被用戶代碼管理,值不能爲空「,但是,我檢查了我的變量,沒有一個是空的,你知道爲什麼我會得到這個異常嗎?(如果異常不是寫得很好,我把它翻譯成法文) – NicolasR 2017-01-17 09:10:26

+0

@NicolasR對於遲到的回覆感到抱歉...如上所述,代碼沒有經過測試,但在過去,我遇到了Image類和特定文件(例如,一個損壞的jpeg文件)的問題。問題仍然相關,您可能需要提出一個新問題幷包含任何可能相關的其他信息。 – fuchs777 2017-08-21 08:22:50

0

經過測試。雖然我不知道Image.Save()方法。新圖像質量可能存在問題(取決於輸入圖像的圖像格式)

public static Image GetImageFromDB(byte[] tab) 
    { 
     if (tab == null) return null; 

     try 
     { 
      MemoryStream ms = new MemoryStream(tab); 
      if (ms != null) 
      { 
       Image im = Image.FromStream(ms, true); 
       // or: Image.FromFile(imagepath); 
       im.RotateFlip(RotateFlipType.Rotate90FlipNone); 
       ms.Dispose(); 

       im.Save(savedImagePath)); 
       return im; 
      } 
     } 
     catch (Exception) 
     { 
     } 

     return null; 
    }