Objective c 在iOS上处理核心图形中的超大图像

Objective c 在iOS上处理核心图形中的超大图像,objective-c,ios,core-graphics,Objective C,Ios,Core Graphics,我有一个非常大的视图(~8000x8000),我想截屏,但是我的应用程序被终止了,截屏代码执行了1/4倍。代码如下所示: // Render the view into a bitmap CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef ctx = CGBitmapContextCreate(NULL, _docume

我有一个非常大的视图(~8000x8000),我想截屏,但是我的应用程序被终止了,截屏代码执行了1/4倍。代码如下所示:

// Render the view into a bitmap
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(NULL, 
                                         _document.size.width, 
                                         _document.size.height, 
                                         8, 0, colorSpace, 
                                         kCGImageAlphaPremultipliedLast);

// Convert the UI space to CG space
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -_document.size.height);

// Render the view
[_contentView.layer renderInContext:ctx];
CGImageRef screenshot = CGBitmapContextCreateImage(ctx);

// Cleanup
CGContextRelease(ctx);    
CGColorSpaceRelease(colorSpace);

很明显,这将占用大量内存。有人有处理超大图像和coregraphics的技巧吗?

不要一次渲染整个图像,渲染一个500x8000“带”,写出它,释放它,重复16次。

最好的解决方案是打开PDF上下文并写入它。这样,它使用文件内存而不是视频内存


是的,我喜欢这个想法,但我希望RenderContext具有“renderRect”类型的功能。此外,我如何将所有渲染的分片缝合在一起而不将它们读回内存?嗯……只读mmap(2)可能不会被视为“内存”,因为您的进程会因内存过度使用而被终止。大概如果你没有其他选择,那就值得一试。你可以直接在磁盘上,而不是在内存中,将磁贴缝合在一起。此方法比您接受的方法更好,因为它允许您控制流程。另外,如果你实际上不需要PDF,它可能会更快。