在 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
已处理。
我已经将图像(.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
已处理。