如何获取TIFF图像的字节数组并将其转换为System.Drawing.Image对象?
我有一个" byte []"数组,其内容表示一个TIFF文件(例如,如果我使用" BinaryWriter"对象将这些字节直接写到文件中,它将形成一个完全有效的TIFF文件),而我我试图将其转换为System.Drawing.Image对象,以便可以将其用于以后的操作(馈入多页TIFF对象)
我遇到的问题是此任务的通用代码:
public Image byteArrayToImage(byte[] byteArrayIn) { MemoryStream ms = new MemoryStream(byteArrayIn); Image returnImage = Image.FromStream(ms, true); return returnImage; }
对我不起作用。上述方法的第二行调用了Image.FromStream方法,该方法在运行时终止,表示
Parameter Not Valid
我认为该方法使TIFF文件成为事实,但我无法弄清楚如何使FromStream方法接受这一事实。
如何将TIFF图像的字节数组转换为Image对象?
同样,就像我说的那样,此操作的最终目标是要有一个字节数组,该字节数组表示一个多页TIFF文件,其中包含TIFF文件,而我现在对此文件具有字节数组对象。如果有更好的方法可以做到这一点,我全力以赴。
解决方案
回答
编辑:下面的假设是不正确的,我稍后有机会启动我的IDE,并在有无Write的情况下进行了测试,并且两者均正确填充了MemoryStream。
我认为我们需要先写MemeoryStream。
好像我的记忆(没有双关语)正确地为我服务:
MemoryStream ms = new MemoryStream(byteArrayIn);
创建该大小的内存流。
然后,我们需要将字节数组的内容写入内存流:
ms.Write(byteArrayIn, 0, byteArrayIn.Length);
看看是否能解决问题。
回答
好的,我发现了问题,这是由于代码的一部分与我要询问的部分无关。数据以字符串形式传递,我将其转换为字节数组(这是一个测试设备,因此我试图模拟在主应用程序中获得的字节数组),然后将其转换为MemoryStream,然后进行从中得到的图像。
我没有意识到的是该字符串是Base64编码的。调用Convert.FromBase64String()
导致它变成一个字节数组,不会杀死Image.FromStream()
方法。
所以从根本上讲,这归结为我的一个愚蠢的错误。但是,上面的代码仍然有用,并且该页面可能会作为Google的结果,说明如何避免其他人犯此错误。
另外,我在这里找到了一种从字节数组构造多页TIFF的简单方法。