C# 在C中加载动画GIF#
我使用AdobeFlashCS3创建了一个简单的动画GIF,GIF包含200帧(1280x786)。当我加载它以在C#WPF应用程序中显示时,程序会在以下代码中获得OutofMemoryExceptionC# 在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();
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的方法吗?