SaveAdd

时间:2017-06-06 11:01:25

标签: c# .net gdi+ tiff

我正在尝试创建一个小程序,从文件夹中获取一组多页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();
            }

        }
    }
}

1 个答案:

答案 0 :(得分:0)

评论指出我关于EncoderParameters未正确更新/处理的正确方向。

问题在于

encoderParams.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);

在循环之外。因此,第一个文档正常工作但第二个文档失败。