在 C# 中将字节数组转换为图像

Converting byte array to image in C#

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

从图像到字节数组的初始转换:

//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);

不过好像结果不太一样。我有一个 "Splitting" 函数,可以在 tiff 中拆分页面,一个 returns 8 页(位图),另一个只有 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 已处理。