3

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 をロードすると、プログラムは正常にロードされます。次の状況に注意してください。

  • 200 フレームで 1280x768: 例外
  • 200 フレームの 550x400: 正常に読み込まれます
  • 1280x768、50 フレーム: 正常にロード

問題はどこだ?このような大きなアニメーション GIF を例外なくロードするにはどうすればよいですか?

4

1 に答える 1

4

または、リリース モードで実行することもできます... OutOfMemoryException に悩まされるべきではありません...

GIF のサイズを少し変更することをお勧めします。200fps 1280x768 ビットマップは大量のメモリを表すためです...

見てみましょう... 1 フレームは 983040 ピクセルを表します... (1280 x 768)、各ピクセルは 3 色のデータで構成されているため、3 バイトは次のようになります: 3 * 983040 = 2949120 バイトは 1 フレームだけです... あなたは 200 を持っていますそれらのうち...つまり:589824000バイト。これは 576000 キロバイトまたは 562.7 メガバイトに相当します...

すごい量ですね…

于 2013-08-03T16:06:28.260 に答える