Apple は、ここで画面をキャプチャするためのソース コードを提供しています: http://developer.apple.com/library/ios/#qa/qa1703/_index.html
ただし、常にキャプチャすると、コンテキスト内でレンダリングするたびに UI が非常に遅くなります。別のスレッドにディスパッチしようとすると、しばらくは機能しますが、メモリ リークが原因でクラッシュします。その理由は、使用する UIKit 呼び出しの一部がスレッド セーフではなく、メイン スレッドでしか使用できないためです。
UIKIT を使用せずに画面をキャプチャし、代わりに純粋に Quartz2d を使用する別の方法を探しています。これが私がやったことですが、キャプチャすると上下逆になり、画像が横に2倍になり、iPAD Retinaを使用している場合、画像は画面の約1/6と非常に小さくなります:
CGSize imageSize = [[UIScreen mainScreen] bounds].size;
size_t bytesPerRow = imageSize.width * 5;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(buffer, imageSize.width, imageSize.height, 5, bytesPerRow, colorSpace,
kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrderDefault);
for (UIWindow *window in [[UIApplication sharedApplication] windows])
{
// Render the layer hierarchy to the current context
[[window layer] renderInContext:context];
}
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
正しい縮尺と適切な座標変換で適切なコンテキストを作成する方法を知っている人はいますか?
または、私のコードの何が問題になっていますか?
または、メインスレッドからこれを行うより良い方法はありますか?
ありがとう