GDI +中发生了一般错误。保存多个图像文件时 [英] A generic error occurred in GDI+. While saving a multiple image file

查看:87
本文介绍了GDI +中发生了一般错误。保存多个图像文件时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要解释为什么我的代码在保存多个图像页面时抛出错误(GDI +中发生了一般错误。)。有时它会保存所有页面而不会出现任何错误。有时也是第一次出错。有时也会保存第一页和第二页,但在保存任何其他页面时会抛出错误。





Please I need explanation why my code throw an error (A generic error occurred in GDI+.) while saving a multiple image pages. Sometime it would saved all the pages without any error. At times too it through error on the first. And sometime too the first and second pages would be saved but throw an error when saving any other pages.


public bool SaveMultipleImages(Image[] sourceImages, string targetFile)
{
    bool response = false;

    try
    {
        assignEncoder();

        // Merge individual Images into one Image
        // First page
        Image finalImage = sourceImages[0];

        finalImage.Save(targetFile, tifImageCodecInfo, tifEncoderParametersPage1);
        // All other pages

        int lastpage = sourceImages.Length;
        for (int i = 1; i < sourceImages.Length; i++)
        {
            finalImage.SaveAdd(sourceImages[i], tifEncoderParametersPageX);
        }
        // Last page
        
        finalImage.SaveAdd(tifEncoderParametersPageLast);

        finalImage.Dispose();

        response = true;
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error saving merged file: " + ex.Message);
        throw new Exception("Error saving merged file: " + ex.Message);
    }

    return response;
}










private void assignEncoder()
{
   try
   {
       if (encoderAssigned == true)
           return;

       foreach (ImageCodecInfo ici in ImageCodecInfo.GetImageEncoders())
       {
           if (ici.MimeType == "image/tiff")
           {
               tifImageCodecInfo = ici;
           }
       }

       tifEncoderSaveFlag = System.Drawing.Imaging.Encoder.SaveFlag;
       tifEncoderCompression = System.Drawing.Imaging.Encoder.Compression;
       tifEncoderColorDepth = System.Drawing.Imaging.Encoder.ColorDepth;

       tifEncoderParameterMultiFrame = new EncoderParameter(tifEncoderSaveFlag, (long)EncoderValue.MultiFrame);
       tifEncoderParameterFrameDimensionPage = new EncoderParameter(tifEncoderSaveFlag, (long)EncoderValue.FrameDimensionPage);
       tifEncoderParameterFlush = new EncoderParameter(tifEncoderSaveFlag, (long)EncoderValue.Flush);
       tifEncoderParameterCompression = new EncoderParameter(tifEncoderCompression, (long)EncoderValue.CompressionRle);
       tifEncoderParameterLastFrame = new EncoderParameter(tifEncoderSaveFlag, (long)EncoderValue.LastFrame);
       tifEncoderParameter24BPP = new EncoderParameter(tifEncoderColorDepth, (long)24);
       tifEncoderParameter1BPP = new EncoderParameter(tifEncoderColorDepth, (long)8);

       // ******************************************************************* //
       // *** Have only 1 of the following 3 groups assigned for encoders *** //
       // ******************************************************************* //

       // Regular
       tifEncoderParametersPage1 = new EncoderParameters(1);
       tifEncoderParametersPage1.Param[0] = tifEncoderParameterMultiFrame;
       tifEncoderParametersPageX = new EncoderParameters(1);
       tifEncoderParametersPageX.Param[0] = tifEncoderParameterFrameDimensionPage;
       tifEncoderParametersPageLast = new EncoderParameters(1);
       tifEncoderParametersPageLast.Param[0] = tifEncoderParameterFlush;

       encoderAssigned = true;
   }
   catch (Exception ex)
   {
       Console.WriteLine(ex.Message);
       throw ex;
   }
}

推荐答案

Skeet解决了这个问题 here [ ^ ]。



/ ravi
Skeet has addressed this problem here[^].

/ravi


这篇关于GDI +中发生了一般错误。保存多个图像文件时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆