0
私は、フォルダから複数のページのTIFFファイルのセットを取るために、フロントページを削除し、別の出力フォルダに同じ名前を使用して残りのページを保存する小さなプログラムを作成しようとしています。C#一般的なエラーGDI + SaveAdd
ファイルは出力フォルダに問題なく保存できますが、の2番目の文書のSaveAdd関数に到達すると、 "Generic Error Occurred GDI +"が表示されます。最初の文書(出力の7ページ)はすべてのページを正しく追加します。最初のページの後にページ/フレームを追加しようとすると、2番目のドキュメントが失敗します。私は様々なページ数で1番目と2番目の異なる文書を試しました。誰かが問題にどのような光を当てることができますか?
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();
}
}
}
}
'EncoderParameter'クラスは' IDisposable'を実装しているため、処分する必要があります。あなたのコードはそれを漏らします。 'using'ブロックを使って、' Dispose'への呼び出しを振りかざすことを避けることを考えてください。処分する必要がある他のオブジェクトもあるかもしれません。漏れがないか慎重にコードを確認してください。 GDI +にエラーがあり、 'System.Drawing'名前空間がGDI +の大きなラッパーです。 –
それを解決するために管理されます。 「32ビットの優先」チェックボックスのチェックを外しても問題は解決しなかったので、ループ内で何かがクリアされていない、またはトリガーされていないと思われていたことをもう一度繰り返しました。私はIDisposeを読んで始めました(少なくとも私は少なくとも1つの事を見なければならないたびに教えています!)、私はParamをループ外に設定していたことに気付きました。それを問題の中に置く。ポインタをありがとう:) – N1ghtwolf89