1

我正在尝试按照以下链接中的说明进行操作:

使用 c#.net 合并两个 tiff 图像

但是,当我使用 SaveAdd 方法时,我收到“GDI+ 中发生一般错误”

上面链接中的解决方案确实显示了 bitmap1、bitmap2 或 newFileName 是如何初始化的,所以我认为它与此有关,但我不确定......

这是我的代码:

    string filePathA = "C:\\Users\\me\\Documents\\Projects\\TestTifMerge\\Samples\\00000516.tif";
     string filePathB = "C:\\Users\\me\\Documents\\Projects\\TestTifMerge\\Samples\\11164_6018188.tif";
     string newFileName = "C:\\Users\\me\\Documents\\Projects\\TestTifMerge\\Samples\\combined.tif";


     Bitmap bitmap1;
     Bitmap bitmap2;



     bitmap1 = (Bitmap) Image.FromFile( filePathA );
     bitmap2 = (Bitmap) Image.FromFile( filePathB );



     ImageCodecInfo tiff = null;

     foreach( ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders() ) {
        if( codec.MimeType == "image/tiff" ) {
           tiff = codec;
           break;
        }
     }
     Encoder encoder = Encoder.SaveFlag;
     EncoderParameters parameters = new EncoderParameters( 1 );
     parameters.Param[ 0 ] = new EncoderParameter( encoder, ( long ) EncoderValue.MultiFrame );

     bitmap1.Save( newFileName, tiff, parameters );

     //Bitmap bitmapTemp = new Bitmap( bitmap1 );

     parameters.Param[ 0 ] = new EncoderParameter( encoder, ( long ) EncoderValue.FrameDimensionPage );
     bitmap2.SaveAdd(  parameters );

如您所见,我使用的代码与链接中建议的解决方案几乎相同。该代码似乎通过了 Save 方法,但在 SaveAdd 方法上阻塞了。

有任何想法吗?

4

1 回答 1

1

我使用的代码如下。非常接近上面的内容,但我将所有内容都添加到了 bitmap1。

foreach( ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders() ) {
                      if( codec.MimeType == "image/tiff" ) {
                         tiff = codec;
                         break;
                      }
                   }
                   System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
                   EncoderParameters parameters = new EncoderParameters( 1 );
                   parameters.Param[ 0 ] = new EncoderParameter( encoder, ( long ) EncoderValue.MultiFrame );

                   bitmap1.Save( newFileName, tiff, parameters );

                   parameters.Param[ 0 ] = new EncoderParameter( encoder, ( long ) EncoderValue.FrameDimensionPage );
                   bitmap1.SaveAdd( bitmap2, parameters );

                   bitmap1.Dispose();
                   bitmap2.Dispose();
于 2013-07-03T16:05:54.013 回答