在iOS上的Core Graphics中处理非常大的图像

时间:2011-12-04 17:26:40

标签: objective-c ios core-graphics

我有一个非常大的视图(~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);

显然它会使用很多的内存。有没有人有任何使用非常大的图像和核心图形的技巧?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/GeneratingPDF/GeneratingPDF.html