在C#中加载动画GIF

时间:2013-08-03 14:53:10

标签: c# wpf gif

我使用Adobe Flash CS3创建了一个简单的动画GIF,GIF包含200帧(1280x786)。当我加载它以显示在C#WPF应用程序中时,程序在以下代码上获得OutofMemoryException

private void set_gif_Image(String path)
    {
        if (File.Exists(path))
        {
            var bitmapimage = new BitmapImage();

            bitmapimage.BeginInit();
            bitmapimage.UriSource = new Uri(path);
            bitmapimage.EndInit();
            ImageBehavior.SetAnimatedSource(img_preview, bitmapimage);//Exception Here
        }
        else
        {
            var bitmapimage = new BitmapImage();

            bitmapimage.BeginInit();
            bitmapimage.UriSource = new Uri("C:\\testing_files\\ERROR.gif");
            bitmapimage.EndInit();

            ImageBehavior.SetAnimatedSource(img_preview, bitmapimage);
        }

但是如果我加载一个20帧的GIF,程序加载正常。请注意以下情况:

  • 1280x768,200帧:例外
  • 550x400,200帧:装载精细
  • 1280x768,50帧:加载

问题出在哪里?如何在没有异常的情况下加载如此大的动画GIF?

1 个答案:

答案 0 :(得分:4)

或者您可以在发布模式下运行它...不应该被OutOfMemoryException打扰...

我建议您稍微调整GIF的大小,因为200fps的1280x768位图代表了大量的内存......

让我们看看... 1帧代表983040像素...(1280 x 768),每个像素由3种颜色的数据组成,因此3个字节等于:3 * 983040 = 2949120字节仅一帧... 你有200个......所以:589824000 Bytes。 这相当于576000 kBytes或562.7 MBytes ......

那太可怕了......