2014-08-29 24 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; 
    }