Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中加载动画GIF#_C#_Wpf_Gif - Fatal编程技术网

C# 在C中加载动画GIF#

C# 在C中加载动画GIF#,c#,wpf,gif,C#,Wpf,Gif,我使用AdobeFlashCS3创建了一个简单的动画GIF,GIF包含200帧(1280x786)。当我加载它以在C#WPF应用程序中显示时,程序会在以下代码中获得OutofMemoryException private void set_gif_Image(String path) { if (File.Exists(path)) { var bitmapimage = new BitmapImage();

我使用AdobeFlashCS3创建了一个简单的动画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:异常
  • 550x400,200帧:负载正常
  • 带有50帧的1280x768:加载正常

问题在哪里?如何毫无例外地加载如此大的动画GIF?

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

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

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


这太多了……

我希望这篇文章能对你有所帮助。最好假设异常是准确的。对于32位进程来说,消耗786兆内存肯定是危险的。您需要一个64位的进程才能获得成功。将EXE项目的平台目标设置更改为AnyCPU。需要64位版本的Windows。我已经有了64位系统(intel core i7,6GB RAM):|别忘了alpha值。每个像素占用4个字节。这是786432000字节,总计750MB,正如汉斯·帕桑(Hans Passant)在对这个问题的评论中所写的那样。在发布模式下运行如何防止应用程序内存不足?是的,我不确定位图是否有alpha值表示。好久没用了。在释放模式下运行它将保留“调试保留”内存,并使用任何可用内存。我有一个应用程序在调试模式下使用1.5GB内存时抛出了OOMException。一旦我把它放在释放模式,它就占用了可用内存,并在没有任何警告的情况下增长到6GB,完成了它的工作(先别说使用6GB内存不好,因为我后来放弃了这种方法)。即使在发布模式下,我仍然存在同样的问题:|我只是不知道6 GB RAM机器上的内存不足在哪里:|我认为我使用的库存在问题,1024x768在发布模式配置下工作正常。我听说有软件开发人员创建自定义flash动画,并将其作为动画GIF用于具有更大帧数的应用程序中,应用程序运行良好。还有其他加载动画GIF的方法吗?