将图像列表转换为GIf

时间:2014-04-11 08:11:49

标签: c# gif image-conversion

我目前正在尝试从源图像条构建GIF图像,我发现以下异常错误: System.Runtime.InteropServices.ExternalException (0x80004005): A genereric error occurred in GDI+. At ... line 55. At ... line 138. 我正在使用的代码从控制台获取2个用户输入的文件路径,以允许用户选择使用哪个图像作为源,并定义新文件的路径。问题是我不断出现异常错误,而我无法理解:

public void ConvertToGif( string DestinationPath , Image myImage , int myFrames ) {
    Bitmap myBitmap = new Bitmap( myImage.Width / myFrames , myImage.Height );
    myBitmap.Save( DestinationPath , ImageFormat.Gif );

    Image myGIF = Image.FromFile( @DestinationPath );
    FrameDimension myDimensions = new FrameDimension( myGIF.FrameDimensionsList[ 0 ] );

    for( int i = 0; i < myFrames; i ++ ) {
        var DestRegion = new Rectangle( 0 , 0 , myGIF.Width , myGIF.Height );
        var SrceRegion = new Rectangle( myGIF.Width * i , 0 , myGIF.Width , myGIF.Height );
        Graphics GrDrw = Graphics.FromImage( myBitmap );
        GrDrw.DrawImage( myImage , DestRegion , SrceRegion , GraphicsUnit.Pixel );

        EncoderParameter encCompressionrParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW);
        EncoderParameter encQualityParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 0L);
        EncoderParameters myEncoderParameters = new EncoderParameters(2);
        myEncoderParameters.Param[0] = encCompressionrParameter;
        myEncoderParameters.Param[1] = encQualityParameter;
        myGIF.SaveAdd( myBitmap , myEncoderParameters ); /*Line 55*/
    }
}

此处的方法是创建一个空位图,将特定的矩形框从图像条传输到位图,然后将位图作为一个帧添加到GIF图像中。

第138行是这样的: ConvertedGif = new GifConversion(); ConvertedGif.ConvertToGif( DestinationPath , myImage , myFrames );

1 个答案:

答案 0 :(得分:0)

不幸的是,不支持GDI +实现多帧GIF的编码器,你只能使用GDI +创建多帧TIFF文件。

请参阅此文章:http://www.universalthread.com/ViewPageArticle.aspx?ID=841

来自那里的小片段

  

不幸的是,无法创建多帧或动画   使用GdiPlus.dll版本1图像编码器的GIFS。 SaveAdd方法   可以用来将帧添加到多帧TIFF图像中   使用GIF编码器。

您可以从GIF文件中读取信息,但不允许您创建新的框架等。

您可以从.Net GDI +类中获得额外的元数据,例如帧延迟等。

还有其他文章,包括www.asp.net网站引用GDI +不支持编写GIF的

你可能最好使用NGif为你照顾所有这些。

这个问题已经在stackoverflow上讨论了这个问题。

C# - Create an animated GIF image from selected images in ASP.net

此处还有NGif - http://www.codeproject.com/Articles/11505/NGif-Animated-GIF-Encoder-for-NET