Created
January 12, 2010 22:57
-
-
Save neror/275718 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (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