私のプロジェクトでは、画面のスクリーンショットを作成し、ぼかしを適用してすりガラスの効果を作成する必要があります。コンテンツをガラスの下に移動して、ぼやけた画像を変更できます。
Accelerate.framework を使用してぼかしを高速化し、OpenGL を使用して CIImage を GLView に直接描画しました。
今、画面のスクリーンショットの取得を最適化する方法を探しています。このメソッドを使用して、画面の下部にある領域のスクリーンショットを取得します。
CGSize size = CGSizeMake(rect.size.width, rect.size.height);
// get screenshot of self.view
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(nil, size.width, size.height, 8, 0, colorSpaceRef, kCGImageAlphaPremultipliedFirst);
CGContextClearRect(ctx, rect);
CGColorSpaceRelease(colorSpaceRef);
CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);
CGContextSetShouldAntialias(ctx, NO);
CGContextSetAllowsAntialiasing(ctx, NO);
CGContextTranslateCTM(ctx, 0.0, someView.frame.size.height);
CGContextScaleCTM(ctx, 1, -1);
//add mask
CGImageRef maskImage = [UIImage imageNamed:@"mask.png"].CGImage;
CGContextClipToMask(ctx, rect, maskImage);
[someView.layer renderInContext:ctx];
//get screenshot image
CGImageRef imageRef = CGBitmapContextCreateImage(ctx);
self.view に 1 ~ 2 個のサブビューがある場合は問題なく高速に動作しますが、サブビューが複数ある場合 (またはテーブルビューの場合)、すべてが遅くなり始めます。
だから私は、画面上のいくつかの四角形からピクセルを取得する高速な方法を見つけようとしています。低レベルの API を使用している可能性があります。