3

我使用 Adob​​e 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?

4

1 回答 1

4

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

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

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

这是一个可怕的...

于 2013-08-03T16:06:28.260 回答