我可以毫无问题地打开较小的 tif,但这些 100+MB 的 tif 无法在 Paint.NET 中打开。我不认为这是内存问题,因为其他软件可以毫无问题地打开(IrfanView、XNViewPortable)。这是软件限制吗?
“打开文件时出现未指定的错误。”
http://dl.dropbox.com/u/1156285/PaintDotCrash_OpenBifTif.avi
我在 XP SP3 上使用 Paint.NET v3.5.5(最终版本 3.55.3767.28608)。
更新:
我认为乔尔·库霍恩的回答是正确的。我将图像转换为黑白,文件大小略小于 5MB。然后尝试打开并再次收到错误。
使用原始版本,我尝试了各种各样的方法,最终发现,如果我将像素从 6000x6000 减少到 5000x5000,我就可以用 Paint.NET 打开图像(甚至是 24 位颜色)。
答案1
听起来你遇到了 OutOfMemory 异常。.Net OutOfMemory 异常有点误导。当你用完内存时,更常见的是看到这种异常地址空间,这与物理内存略有不同。这意味着诸如检查任务管理器以查看使用了多少内存之类的操作可能无法帮助您跟踪问题。
相反,问题可能是 Paint.Net 中的一个错误造成的,例如 .Net 运行时将图像的某些部分放置在称为“大型对象堆”的东西上。然后以这样的方式加载文件,即多次创建和销毁同一组内存,也许每次都会变得更大一些。垃圾收集器无法很好地释放或压缩大型对象堆中的地址空间(即使物理内存已被释放或分页),因此您会突然收到 OutOfMemory 异常。
解决方案要么是让 Microsoft 改变 .Net 运行时相对于 LOH 的行为,以便它可以在某些情况下(可能是根据请求,或者在抛出 OutOfMemory 异常之前)进入并压缩 LOH,要么是让 Paint.Net 程序修复它加载文件的方式,以便它能够正确地增大导致问题的现有数据结构,而不是一遍又一遍地重新创建它。
答案2
此类文件在内存中的存储方式会影响其所需的内存量。其他应用程序可能更节省内存。
根据您的描述,Paint.NET 确实内存不足。您可以尝试在打开文件时打开任务管理器,看看内存使用量是否增加。
答案3
它可能正在尝试分配一个连续的内存块来读取文件,请尝试关闭尽可能多的应用程序,然后重新尝试打开它。