Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从memorystream vs filestream写入多页tif文件?_C#_Tiff_Libtiff.net - Fatal编程技术网

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