我正在尝试分配内存 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
对于小图片,它可以正常工作。
任何帮助??
答案 0 :(得分:2)
使用libjpeg可能是一个选项,它似乎能够进行优化的子扩展,最多可达16:http://jpegclub.org/djpeg/。
libjpeg是普通的C,所以你可以从Objective-C中调用它。
答案 1 :(得分:1)
我想问你为什么要把所有的图像加载到内存中 - 当然像瓷砖一样处理它会是一个更好的选择吗?
你收到这条消息是因为,虽然你可能没有这么多内存,但你没有那么多连续的内存
答案 2 :(得分:1)
如果你想要的只是预览,你可以逐行阅读,跳过每n行,每行,跳过每n个像素。你留下了一个(路)较小的图像,你可以在必要时通过更复杂的缩放算法,或者你可以将它保存为缩略图或其他任何东西。
答案 3 :(得分:0)
如果您只想创建图像预览,CGImageSource会为此专门提供API。它们是第一个,不需要将整个图像读入内存。