【问题标题】:Converting byte array to image in C#在 C# 中将字节数组转换为图像
【发布时间】:2020-02-20 15:32:29
【问题描述】:

我已将图像(.tif 图像)转换为字节数组并保存在数据库中。我现在正在从数据库中检索该字节数组并想再次转换为图像,但是我正在转换回图像的这个字节数组并没有产生相同的结果。作为测试(如下),我只使用图像而不是从数据库中读取,用于测试目的。

Image 到字节数组的初始转换:

//This is the function I am using:
public static byte[] ImageToByteArray(Image image)
        {
            using (var ms = new MemoryStream())
            {
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
                return ms.ToArray();
            }
        }

//Converting to byte array:
var tifImage = Image.FromFile(file.ToString());
var imageContent = ImageToByteArray(tifImage);

现在要尝试转换回图像,我正在执行以下操作:

var ms = new MemoryStream(imageContent);
var test1 = Image.FromStream(ms);

但似乎结果不一样。我有一个“拆分”功能,可以拆分 tiff 中的页面,一个返回 8 个页面(位图),另一个返回 1 个。

我对上面的了解不多,所以需要一些帮助来填补知识空白,请:)

感谢您的帮助!

【问题讨论】:

  • stackoverflow.com/a/16958128/7772646 您可以查看此答案以进行转换,看看是否有任何不同
  • 感谢 BrightHammer 的回复 - 这似乎是 Bytes[] 的图像,我的问题是从 Bytes[]Image 不一样 :(
  • 轴,我认为当你将它转换为字节而不是从字节重新创建图像时会出现问题。
  • 一切皆有可能,我会看看并回复您。
  • 我通过替换我当前的ImageToByteArray 尝试了解决方案,但是将Byte[] 转换回图像时结果仍然不正确:( 我确定我必须遗漏一些小东西,但所有我所做的研究表明我在做正确的事情:(

标签: c# arrays image-processing memorystream


【解决方案1】:

我找到了一个最终奏效的解决方案。似乎在完成最初的ImageToByteArray 时,它只是在做“第一页”而不是全部 8。所以我使用以下代码来转换整个 tiff 图像:

var tiffArray = File.ReadAllBytes(file); //The `file` is the actual `.tiff` file

然后我使用以下内容转换回图像(response 是从我们的API 返回的byte[]):

using (MemoryStream ms = new MemoryStream(response))
            {
                ms.Position = 0;
                Image returnImage = Image.FromStream(ms);

                var splitImages = ImageHelper.Split(returnImage);//This is to split the pages within the tiff
            }

我读到要使上述内容正常工作(并且我对其进行了测试),您对byte[]所做的任何事情都必须在using 内完成,就像using 之后的任何事情一样表示image 已被释放。

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多