C# 从memorystream vs filestream写入多页tif文件?
我正在尝试使用C# 从memorystream vs filestream写入多页tif文件?,c#,tiff,libtiff.net,C#,Tiff,Libtiff.net,我正在尝试使用LibTiff.Net库,并重写一个合并工具TiffCPapi来使用内存流 该库有一个Tiff类,通过向该类传递流,它可以将Tiff图像合并到此流中 为了进行测试,我传递了一个Filestream,得到了我想要的东西——它合并了,我能够看到多页tif 但是,当我传递内存流时,我能够在循环时验证页面数据是否被添加到流中,但当我在最后将其写入文件时,我只能看到第1页 var mso = new MemoryStream(); var fso = new FileStream(@"C:\
LibTiff.Net
库,并重写一个合并工具TiffCP
api来使用内存流
该库有一个Tiff
类,通过向该类传递流,它可以将Tiff图像合并到此流中
为了进行测试,我传递了一个Filestream
,得到了我想要的东西——它合并了,我能够看到多页tif
但是,当我传递内存流时,我能够在循环时验证页面数据是否被添加到流中,但当我在最后将其写入文件时,我只能看到第1页
var mso = new MemoryStream();
var fso = new FileStream(@"C:\test\ttest.tif",FileMode.OpenOrCreate); //This works
using (Tiff outImage = Tiff.ClientOpen("custom", "w", mso, tso))
{
//...
//..
System.Drawing.Image tiffImg = System.Drawing.Image.FromStream(mso, true);
tiffImg.Save(@"C:\test\test2.tiff", System.Drawing.Imaging.ImageFormat.Tiff);
tiffImg.Dispose();
//..
//..
}
注:我需要它在memorystream中,因为服务器上的一些文件夹权限+供应商API的原因 您可能在数据实际写入内存流之前使用内存流
在访问内存流中的数据之前,请使用Tiff.Flush()
方法。请确保为创建的每个页面调用Tiff.WriteDirectory()
方法
编辑:
请看鲍伯·鲍威尔的文章。本文展示了如何使用EncoderParameter
s实际生成多页TIFF
使用
您可能只保存了第一帧。我正在使用这两个函数,我甚至检查了这个fso.Write(mso.GetBuffer(),0,mso.GetBuffer().Length);当我使用文件流时,我可以看到两个页面。正如你所看到的,我只是从内存流中读取。但当我像System.Drawing.Image.FromStream(mso,true)那样编写它时;它只写第一页。
tiffImg.Save(@"C:\test\test2.tiff", System.Drawing.Imaging.ImageFormat.Tiff);