完整截屏

void SaveScreenImage(NSString *path) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; CGImageRef cgImage = UIGetScreenImage(); void *imageBytes = NULL; if (cgImage == NULL) { CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); imageBytes = malloc(320 * 480 * 4); CGContextRef context = CGBitmapContextCreate(imageBytes, 320, 480, 8, 320 * 4, colorspace, kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big); CGColorSpaceRelease(colorspace); for (UIWindow *window in [[UIApplication sharedApplication] windows]) { CGRect bounds = [window bounds]; CALayer *layer = [window layer]; CGContextSaveGState(context); if ([layer contentsAreFlipped]) { CGContextTranslateCTM(context, 0.0f, bounds.size.height); CGContextScaleCTM(context, 1.0f, -1.0f); } [layer renderInContext:(CGContextRef)context]; CGContextRestoreGState(context); } cgImage = CGBitmapContextCreateImage(context); CGContextRelease(context); } NSData *pngData = UIImagePNGRepresentation([UIImage imageWithCGImage:cgImage]); CGImageRelease(cgImage); if (imageBytes) free(imageBytes); [pngData writeToFile:path atomically:YES]; [pool release]; }

posted @ 2010-08-17 15:04  harvey.ding  阅读(156)  评论(0)    收藏  举报