我正在尝试打开已经存在的多页tiff图像,将其分解为所有单独的页面并将其保存到位图数组中,压缩页面并将其重新保存回较小的TIFF图像比我们开始的时候。
我的限制是必须能够在Windows Server 2003上运行,这意味着我必须使用wpfImage
来压缩图像。
到目前为止,我已经能够获取所有页面,并且我能够成功保存单页tiff,但是如果我尝试重新保存多页TIFF,我的代码就会失败。这是主要的压缩代码:
using (MemoryStream ms = new MemoryStream())
{
TiffBitmapEncoder encoder = new TiffBitmapEncoder();
ms.Position = 0;
for (int i = 1; i < bmp.Length; i ++ )
{
//ms.SetLength(0);
Bitmap page = new Bitmap(bmp[i]);
page.Save(ms, ImageFormat.Tiff);
BitmapImage wpfImage = new BitmapImage();
wpfImage.BeginInit();
wpfImage.StreamSource = ms;
wpfImage.EndInit();
encoder.Compression = TiffCompressOption.Ccitt4;
encoder.Frames.Add(BitmapFrame.Create(wpfImage));
encoder.Save(ms);
}
Image tiff = Image.FromStream(ms);
tiff.Save(location);
}
正如我所说,这段代码适用于单页TIFF,我得到了相当多的压缩。关于如何将其应用于多页tiff,我感到很遗憾。我得到的主要错误是我无法在编码器上多次调用Save()
方法,但如果是这样的话,我应该如何在第一个之后获取所有页面呢?