Я пытаюсь разработать настольное приложение, которое преобразует несколько изображений в многостраничный TIFF для каждой папки.
Я пытаюсь использовать следующий код, но выдает ошибку, когда в папке содержится большое количество файлов, имеющихРазмер 1 МБ.
public bool saveMultipage(Image[] bmp, string location, string type)
{
if (bmp != null)
{
try
{
ImageCodecInfo codecInfo = getCodecForstring(type);
for (int i = 0; i < bmp.Length; i++)
{
if (bmp[i] == null)
break;
bmp[i] = (Image)ConvertToBitonal((Bitmap)bmp[i]);
}
if (bmp.Length == 1)
{
EncoderParameters iparams = new EncoderParameters(1);
Encoder iparam = Encoder.Compression;
EncoderParameter iparamPara = new EncoderParameter(iparam, (long)(EncoderValue.CompressionCCITT4));
iparams.Param[0] = iparamPara;
bmp[0].Save(location, codecInfo, iparams);
}
else if (bmp.Length > 1)
{
Encoder saveEncoder;
Encoder compressionEncoder;
EncoderParameter SaveEncodeParam;
EncoderParameter CompressionEncodeParam;
EncoderParameters EncoderParams = new EncoderParameters(2);
saveEncoder = Encoder.SaveFlag;
compressionEncoder = Encoder.Compression;
// Save the first page (frame).
SaveEncodeParam = new EncoderParameter(saveEncoder, (long)EncoderValue.MultiFrame);
CompressionEncodeParam = new EncoderParameter(compressionEncoder, (long)EncoderValue.CompressionCCITT4);
EncoderParams.Param[0] = CompressionEncodeParam;
EncoderParams.Param[1] = SaveEncodeParam;
File.Delete(location);
bmp[0].Save(location, codecInfo, EncoderParams);
for (int i = 1; i < bmp.Length; i++)
{
if (bmp[i] == null)
break;
SaveEncodeParam = new EncoderParameter(saveEncoder, (long)EncoderValue.FrameDimensionPage);
CompressionEncodeParam = new EncoderParameter(compressionEncoder, (long)EncoderValue.CompressionCCITT4);
EncoderParams.Param[0] = CompressionEncodeParam;
EncoderParams.Param[1] = SaveEncodeParam;
bmp[0].SaveAdd(bmp[i], EncoderParams);
}
SaveEncodeParam = new EncoderParameter(saveEncoder, (long)EncoderValue.Flush);
EncoderParams.Param[0] = SaveEncodeParam;
bmp[0].SaveAdd(EncoderParams);
}
return true;
}
catch (System.Exception ee)
{
throw new Exception(ee.Message + " Error in saving as multipage ");
}
}
else
return false;
}
В этой функции я передаю объект Array of Image, содержащий изображения текущей папки.
Пока я готовлю массив Image, вв этот раз приложение выдает исключение Out of Memory
.
Пожалуйста, предоставьте решение для этого.
Спасибо.