objective-c - 在 iOS 的 Core Graphics 中处理非常大的图像

标签 objective-c ios core-graphics

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

显然它会使用大量 内存。有人有处理非常大的图像和核心图形的技巧吗?

最佳答案

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

关于objective-c - 在 iOS 的 Core Graphics 中处理非常大的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8377133/

相关文章:

ios - 快速移动多个物体

ios - UIBezierPath 没有出现

objective-c - CG Gradient 在模拟器上运行,但不能在 iPhone 上运行

ios - 如何设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量?

ios - UICollectionView 没有调用 didSelectItemAtIndexPath

ios - 删除突出显示栏按钮上的白色

iOS 自动布局与 ScrollView : Contentsize issue

ios - iOS构建包太大,任何优化策略

ios - 为什么 reloadRowsAtIndexPaths 不适用于 iOS 5.0?

ios - 添加 UIGestureRecognizer 以从左向右滑动我的 View