SaveAdd 上的 C# 一般错误 GDI+
C# Generic Error GDI+ on SaveAdd
我正在尝试创建一个小程序来从文件夹中取出一组多页 TIFF 文件,删除首页并使用相同的名称将剩余页面保存到单独的输出文件夹。
文件可以毫无问题地保存到输出文件夹,但是当它到达 second 文档上的 SaveAdd 函数时,我得到 "A Generic Error Occurred in GDI+"。第一个文档(输出 7 页)正确添加所有页面。尝试在初始页面后添加其他 pages/frames 时,第二个文档失败。我已经尝试过不同的文档作为第一个和第二个不同的页数。任何人都可以阐明这个问题吗?
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();
}
}
}
}
关于未 updating/being 正确处理的编码器参数,评论为我指明了正确的方向。
问题出在
encoderParams.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
在循环之外。因此第一个文件工作正常但第二个文件失败。
我正在尝试创建一个小程序来从文件夹中取出一组多页 TIFF 文件,删除首页并使用相同的名称将剩余页面保存到单独的输出文件夹。
文件可以毫无问题地保存到输出文件夹,但是当它到达 second 文档上的 SaveAdd 函数时,我得到 "A Generic Error Occurred in GDI+"。第一个文档(输出 7 页)正确添加所有页面。尝试在初始页面后添加其他 pages/frames 时,第二个文档失败。我已经尝试过不同的文档作为第一个和第二个不同的页数。任何人都可以阐明这个问题吗?
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();
}
}
}
}
关于未 updating/being 正确处理的编码器参数,评论为我指明了正确的方向。
问题出在
encoderParams.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
在循环之外。因此第一个文件工作正常但第二个文件失败。