0

私のプロジェクトでは、画面のスクリーンショットを作成し、ぼかしを適用してすりガラスの効果を作成する必要があります。コンテンツをガラスの下に移動してから、メソッドbluredImageWithRect:を呼び出すことができます。アプリケーションを高速化するために、次の方法を最適化しようとしています。スクリーンショットにブラーフィルターを適用すると大きな損失が発生するため、低解像度でスクリーンショットを撮り、スクリーンショットにブラーを適用してから、長方形に合うようにストレッチする方法を探しています。

- (CIImage *)bluredImageWithRect:(CGRect)rect {

    CGSize smallSize = CGSizeMake(rect.size.width, rect.size.height);

    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    CGContextRef ctx = CGBitmapContextCreate(nil, smallSize.width, smallSize.height, 8, 0, colorSpaceRef, kCGImageAlphaPremultipliedFirst);
    CGContextClearRect(ctx, rect);
    CGColorSpaceRelease(colorSpaceRef);
    CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);
    CGContextSetShouldAntialias(ctx, NO);
    CGContextSetAllowsAntialiasing(ctx, NO);

    CGContextTranslateCTM(ctx, 0.0, self.view.frame.size.height);
    CGContextScaleCTM(ctx, 1, -1);

    CGImageRef maskImage = [UIImage imageNamed:@"mask.png"].CGImage;
    CGContextClipToMask(ctx, rect, maskImage);


    [self.view.layer renderInContext:ctx];

    CGImageRef imageRef1 = CGBitmapContextCreateImage(ctx);

    CGContextRelease(ctx);

    NSDictionary *options = @{(id)kCIImageColorSpace : (id)kCFNull};
    CIImage *beforeFilterImage = [CIImage imageWithCGImage:imageRef1 options:options];

    CGImageRelease(imageRef1);

    CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur" keysAndValues:kCIInputImageKey, beforeFilterImage,  @"inputRadius", [NSNumber numberWithFloat:3.0f], nil];
    CIImage *afterFilterImage = blurFilter.outputImage;

    CIImage *croppedImage = [afterFilterImage imageByCroppingToRect:CGRectMake(0, 0, smallSize.width, smallSize.height)];

    return croppedImage;
}
4

1 に答える 1

1

これは、加速フレームワークを使用したiOS画像処理のチュートリアルであり、必要なものに対して十分に高速なぼかし効果を実行する方法を示しています。

于 2012-10-25T06:00:14.853 に答える