我正在尝试创建一个小程序,从文件夹中获取一组多页TIFF文件,删除首页,并使用相同名称将剩余页面保存到单独的输出文件夹中。
文件可以保存到输出文件夹而没有问题,但是当它到达第二个文档上的SaveAdd函数时,我得到“GDI +中发生了一般错误”。第一个文档(输出7页)正确添加所有页面。尝试在初始页面后添加其他页面/帧时,第二个文档失败。我尝试过不同的文档作为第一页和第二页,页面数量不同。任何人都可以解释这个问题吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace FrontPageRemover
{
class Program
{
static void Main(string[] args)
{
Image frame;
int pages;
string fileName;
string folderPath = @"TIFF\Tiff Files";
string[] files = Directory.GetFiles(folderPath);
Image image;
Encoder encoder = Encoder.SaveFlag;
ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
foreach (string file in files)
{
image = Image.FromFile(file);
pages = image.GetFrameCount(FrameDimension.Page);
image.SelectActiveFrame(FrameDimension.Page, 1);
fileName = Path.GetFileName(file);
image.Save(@"TIFF\Files Out\" + fileName, encoderInfo, encoderParams);
for (int index = 2; index < pages; index++)
{
image.SelectActiveFrame(FrameDimension.Page, index);
encoderParams.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);
image.SaveAdd(encoderParams);
}
encoderParams.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
image.SaveAdd(encoderParams);
image.Dispose();
}
}
}
}
答案 0 :(得分:0)
评论指出我关于EncoderParameters未正确更新/处理的正确方向。
问题在于
encoderParams.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
在循环之外。因此,第一个文档正常工作但第二个文档失败。