以下行在加载大图像时抛出OutOfMemoryException
System.Drawing.Image img = System.Drawing.Image.FromFile(filepath);
我尝试使用8280x6208 8,76 MB图像文件和许多其他较小的图像,这很好用。
但是当我尝试使用10328x7760 6,44 MB的图像文件时,它会抛出OutOfMemoryException。
我也尝试在photoshop中打开文件并以更差的质量(1,32 MB)保存它,但是使用相同的尺寸,它会抛出OutOfMemoryException。
我尝试将另一个较小的图像扩展到10328x7760并抛出OutOfMemoryException。
所以我很确定这是一个实际的内存不足问题,我的问题是:
我可以以某种方式增加记忆吗?
我正在使用带有8GB RAM的Windows 8.1 64位,带有IIS Express的Visual Studio 2013。这是一个Web应用程序项目。
编辑:我不认为这是建议的格式问题,我尝试使用10000x10000黑色图像和5000x5000黑色图像。 10000抛出OOM,5000没有。答案 0 :(得分:3)
将其编译为“任何CPU”并取消Visual Studio解决方案构建配置中的“首选32位”。
并不是说你没有内存,而是默认情况下.NET应用程序以32位进程运行,而且它没有足够的内存。
答案 1 :(得分:3)
来自Image.FromFile
文档,我们可以读到:
如果文件没有有效的图像格式,或者GDI +不支持文件的像素格式,则此方法会抛出OutOfMemoryException异常。
您可能想尝试使用替代方法Image.FromStream
。你不应该得到例外
var fs = new FileStream(filepath, FileMode.Open, FileAccess.Read)
var img = Image.FromStream(fs)
fs.Dispose()
答案 2 :(得分:0)
我能够使用以下代码将其加载到System.Windows.Controls.Image
对象中。
Stream imageStreamSource = new FileStream("largeImage.jpg", FileMode.Open, FileAccess.Read, FileShare.Read);
JpegBitmapDecoder decoder = new JpegBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
BitmapSource bitmapSource = decoder.Frames[0];
System.Windows.Controls.Image myImage = new System.Windows.Controls.Image();
myImage.Source = bitmapSource;
当你完成游戏后,别忘了Dispose
。