【问题标题】:Rotate image (byte array) in datatable在数据表中旋转图像(字节数组)
【发布时间】:2014-10-23 13:22:06
【问题描述】:

我有一个数据表设置为数据网格的项目源(数据网格显示数据表的几列)。除一个之外的所有列都有文本,最后一列将图像保存为字节数组。 图片列绑定到图像控件,该控件显示数据网格中所选行的图像。 数据表保存的图像可以从磁盘位置或数据库中收集。最终,它们都将保存在数据库中。

我有一个按钮,应该将显示的图像顺时针旋转 90°,然后再次将其(作为字节数组)保存在数据表中完全相同的行(和列)上。

我尝试了无数种方法来做到这一点,但没有任何运气。 有人可以帮我旋转和保存这张照片吗?

【问题讨论】:

  • 你能告诉我们你尝试过的无数种方法吗?

标签: c# wpf rotation bytearray


【解决方案1】:

未经测试,但应该可以解决问题(可能需要将图像加载到位图)

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

编辑:由于某种原因,我忘记将图像保存回流...已修复

【讨论】:

  • 嗨,我尝试按照您的建议进行操作,但是当我执行“rotateImage.Save(memoryStream, rotateImage.RawFormat”时,我收到一个异常,提示“发生了“System.ArugmentNullException”类型的异常在 System.Drawing.dll 中,mais 尚未由用户代码管理。值不能为空”。但是,我检查了我的变量,它们都不是空的。你知道我为什么会得到这个异常吗?(我'对不起,如果异常写得不好,我是从法语翻译的)
  • @NicolasR 抱歉回复晚了...如上所述,代码未经测试,但过去我在 Image 类和特定文件(例如损坏的 jpeg 文件)方面遇到问题。如果您的问题仍然相关,您可能需要提出一个新问题并包含任何可能相关的其他信息。
  • @NicolasR,我发现我必须设置图像类型:System.Drawing.Imaging.ImageFormat.Jpeg。例如。 rotateImage.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
  • @Ads 仅适用于 jpeg... 通常 RawFormat 应该保持正确的类型... 还有其他方法可以检测图像格式,例如幻数或类似stackoverflow.com/a/5209604/1328536
【解决方案2】:

已经过测试。我不知道 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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 2011-09-29
    • 2015-07-07
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多