我想为700 MB到800 MB的图像大小分配内存

时间:2009-06-03 08:32:06

标签: cocoa

我正在尝试分配内存 NSImage中* originalLocationImage;

NSURL * fileURL = [NSURL fileURLWithPath:originalLocation]; // originalLocation是我磁盘中的文件路径

originalLocationImage = [[NSImage alloc] initByReferencingURL:fileURL];

NSBitmapImageRep *sourceRep = [[NSBitmapImageRep alloc]initWithData:[SourceImage TIFFRepresentation]]  //this line fails to allocate memory

并且无法使用大图像/

并抛出错误

malloc: *** mmap(size=268435456) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug

对于小图片,它可以正常工作。

任何帮助??

4 个答案:

答案 0 :(得分:2)

使用libjpeg可能是一个选项,它似乎能够进行优化的子扩展,最多可达16:http://jpegclub.org/djpeg/

libjpeg是普通的C,所以你可以从Objective-C中调用它。

答案 1 :(得分:1)

我想问你为什么要把所有的图像加载到内存中 - 当然像瓷砖一样处理它会是一个更好的选择吗?

你收到这条消息是因为,虽然你可能没有这么多内存,但你没有那么多连续的内存

答案 2 :(得分:1)

如果你想要的只是预览,你可以逐行阅读,跳过每n行,每行,跳过每n个像素。你留下了一个(路)较小的图像,你可以在必要时通过更复杂的缩放算法,或者你可以将它保存为缩略图或其他任何东西。

答案 3 :(得分:0)

如果您只想创建图像预览,CGImageSource会为此专门提供API。它们是第一个,不需要将整个图像读入内存。