私はスクリーンショットを撮りたいと思う非常に大きなビュー(〜8000x8000)を持っていますが、アプリケーションはスクリーンショットコードの1/4を終了して終了します。iOSのコアグラフィックスで非常に大きな画像を処理する
// 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);
明らかにメモリのたくさんを使用するようになるだろう:コードは次のようになります。誰も非常に大きな画像とコアグラフィックを扱うトリックを持っていますか?
はい、私はその考えが好きですが、私はrenderInContextは「renderRect」タイプの機能を持っていることを期待しています。また、どのようにレンダリングされたタイルをすべて一緒にステッチしますか?*それらをメモリに読み込まずにどうしますか? – Ralphleon
Um ....読み込み専用mmap(2)は、メモリの過剰使用のためにプロセスが終了する目的で "メモリ"としてカウントされないことがあります。多分。他のオプションがない場合は試してみる価値があります。 – Stripes
タイルは、メモリではなくディスク上で直接縫い合わせることができます。この方法は、プロセスを制御できるため、受け入れた方法よりも優れています。また、実際にPDFが必要ない場合は、おそらく高速です。 –