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