0

我正在尝试使用LibTiff.Net库并重写合并工具TiffCPapi 以使用内存流。

这个库有一个Tiff类,通过向这个类传递一个流,它可以将 tiff 图像合并到这个流中。

对于测试,我通过了 aFilestream并得到了我想要的 - 它合并了,我能够看到多页 tif。

但是当我通过 a 时MemoryStream,我能够验证页面数据是否在循环时被添加到流中,但是当我最后将它写入文件时,我只能看到第一页。

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();
 //..
 //..
}

PS:我需要它在内存流中,因为服务器上的某些文件夹权限 + 供应商 API 的原因。

4

1 回答 1

1

您可能在数据实际写入流之前使用内存流。

Tiff.Flush()在访问内存流中的数据之前使用方法。请确保Tiff.WriteDirectory()为您创建的每个页面调用方法。

编辑:

另请查看 Bob Powell 关于生成多页 TIFF 文件的文章。本文展示了如何使用EncoderParameters 实际生成多页 TIFF。

使用

tiffImg.Save(@"C:\test\test2.tiff", System.Drawing.Imaging.ImageFormat.Tiff);

你可能只保存第一帧。

于 2014-04-22T18:47:01.413 回答