我有一个非常大的视图(~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);
显然它会使用很多的内存。有没有人有任何使用非常大的图像和核心图形的技巧?
答案 0 :(得分:2)
不要一次渲染整个图像,渲染500x8000“波段”,写出来,释放它,重复16次。
答案 1 :(得分:0)
最好的解决方案是打开PDF上下文并写入。这样它使用文件内存而不是视频内存!