Skip to content

Instantly share code, notes, and snippets.

@neror
Created January 12, 2010 22:57
Show Gist options
  • Save neror/275718 to your computer and use it in GitHub Desktop.
Save neror/275718 to your computer and use it in GitHub Desktop.
- (UIImage *)createBlurredGrayscaleScreenshotWithRange:(int)blurRange {
NSDate *now = [NSDate date];
FTLOG(@"%f: %@", [now timeIntervalSinceNow], NSStringFromSelector(_cmd));
UIGraphicsBeginImageContext(self.bounds.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
int bitsPerComponent = CGImageGetBitsPerComponent([viewImage CGImage]);
int bytesPerRow = CGImageGetBytesPerRow([viewImage CGImage]);
// CGBitmapInfo bmpInfo = CGImageGetBitmapInfo([viewImage CGImage]);
CGContextRef context = CGBitmapContextCreate(NULL, viewImage.size.width, viewImage.size.height,
bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaNone);
CGLayerRef cgLayer = CGLayerCreateWithContext(context, viewImage.size, NULL);
CGContextRef layerContext = CGLayerGetContext(cgLayer);
CGRect imgRect = CGRectZero;
imgRect.size = viewImage.size;
CGContextSetAlpha(layerContext, (CGFloat)1.f/blurRange);
CGContextDrawImage(layerContext, imgRect, [viewImage CGImage]);
FTLOG(@"%f: START Draw Layers", [now timeIntervalSinceNow], NSStringFromSelector(_cmd));
CGContextSaveGState(context);
CGContextDrawLayerAtPoint(context, CGPointZero, cgLayer);
for (int i=1; i<blurRange; i++) {
CGFloat blurPoint = (CGFloat)i/(blurRange/2.f);
CGContextDrawLayerAtPoint(context, CGPointMake(blurPoint, blurPoint), cgLayer);
CGContextDrawLayerAtPoint(context, CGPointMake(-blurPoint, -blurPoint), cgLayer);
}
CGContextRestoreGState(context);
FTLOG(@"%f: DONE Draw Layers", [now timeIntervalSinceNow], NSStringFromSelector(_cmd));
CGLayerRelease(cgLayer);
CGImageRef cgimg = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgimg);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
FTLOG(@"%f: %@", [now timeIntervalSinceNow], NSStringFromSelector(_cmd));
return newImage;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment