截图低品质的iOS

时间:2012-10-25 05:52:56

标签: ios iphone screenshot reduce

在我的项目中,我必须制作屏幕截图并应用模糊效果来创建磨砂玻璃的效果。内容可以在玻璃下移动,然后方法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;
}

1 个答案:

答案 0 :(得分:2)

这是一个教程iOS image processing with the accelerate framework,它展示了如何模糊效果,可以快速满足您的需求。