快速截图ios

时间:2012-10-26 13:44:17

标签: ios performance screenshot blur low-level

在我的项目中,我必须制作屏幕截图并应用模糊效果来创建磨砂玻璃的效果。内容可以在玻璃下移动,并且图像变化。

我使用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个子视图,它的工作正常且快速,但如果有多个子视图(或者是tableview),那么一切都开始变慢。

所以我试图找到一种从屏幕上的某个矩形获取像素的快速方法。也许使用低级API。

1 个答案:

答案 0 :(得分:0)

如果只是执行一些动画,尝试这种方式,称为UIView提供的-snapshotViewAfterScreenUpdates:-resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:方法,这些方法返回UIView对象而不渲染成位图图像,因此它更有效。