2012-09-11 24 views
1

在使用真棒ImageResizing组件时,我尝试上传和读取大小约为100MB的图像时遇到“内存不足”错误。它可能看起来很大,但我们是很多人需要提供这种尺寸图像的打印机。ImageResizer在大图像上崩溃

的失败代码的行是:

ImageResizer.ImageBuilder.Current.Build(使用Server.Mappath(strImagePath),使用Server.Mappath(strThumbPath),新ResizeSettings( “maxheight =” + “150” + “& maxwidth =”+“238”));

这可能是GDI本身失败,但除检测错误发生并让用户知道之外,是否有任何解决方法?

预先感谢 铝

+0

图像的文件大小(jpg/png/etc ..)与其分辨率无关和颜色深度是。在32bit下的1000x1000图像将需要大约4兆像素的RAM,仅用于未压缩的原始像素数据。你说你是打印机,所以你最有可能处理更大的图像。 –

+0

感谢您的回复。你怎么能根据尺寸计算出需要的内存?当然大约。我一直在测试的图像是19000 X 13000,真是太棒了! – higgsy

+0

对于32位图像,19000 * 13000 *(bit_depth/8)= 942兆字节。 –

回答

3

甲100MB JPEG解压缩通常以位图形式围绕8千兆字节。你唯一的机会是获得16 GB的内存,并以64位模式运行该进程。

另外,你可以尝试libvips - 它是专为巨大的图像文件。目前还没有.NET包装,但我真的想做一个并获得一些ImageResizer集成!当然,如果没有任何人对资金感兴趣,它可能不会发生一段时间......

+0

嗨计算机语言学家 - 感谢您的回复。有趣的是,我发布的代码有时可以在一台只有4GB内存的机器上运行 - 这很奇怪吗? – higgsy

+0

不是。如果图像使用的是近乎最大的质量,则可能只有3GB左右的位图形式,因此成功取决于您的内存空间是多么分散,以及它有多少空闲。这种工作需要庞大,毫无碎片的公羊。 –