iPhone几种截屏的代码分享

来源:互联网 发布:linux安装源码包 编辑:程序博客网 时间:2024/05/17 14:14

1.

 UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomScale);        [pageView.page.layer renderInContext:UIGraphicsGetCurrentContext()];        UIImage *uiImage = UIGraphicsGetImageFromCurrentImageContext();        UIGraphicsEndImageContext();

2.

 (UIImage *) glToUIImage {    DWScrollView *pageView = [self getActivePageView];    pageView.page.backgroundColor = [UIColor clearColor];    NSInteger myDataLength = 320 * 308 * 4;        // allocate array and read pixels into it.    GLubyte *buffer = (GLubyte *) malloc(myDataLength);    glReadPixels(0, 0, 320, 308, GL_RGBA, GL_UNSIGNED_BYTE, buffer);        // gl renders "upside down" so swap top to bottom into new array.    // there's gotta be a better way, but this works.    GLubyte *buffer2 = (GLubyte *) malloc(myDataLength);        for(int y = 0; y <308; y++)    {        for(int x = 0; x <320 * 4; x++)        {            if(buffer[y* 4 * 320 + x]==0)                buffer2[(307 - y) * 320 * 4 + x]=1;            else                buffer2[(307 - y) * 320 * 4 + x] = buffer[y* 4 * 320 + x];        }    }        // make data provider with data.    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, NULL);        // prep the ingredients    int bitsPerComponent = 8;    int bitsPerPixel = 32;    int bytesPerRow = 4 * 320;    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;        // make the cgimage    CGImageRef imageRef = CGImageCreate(320, 308, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);        // then make the uiimage from that    UIImage *myImage = [UIImage imageWithCGImage:imageRef];    UIImageWriteToSavedPhotosAlbum(myImage, nil, nil, nil);    return myImage;}

3.

(void)grabScreen {    unsigned char buffer[320*480*4];    glReadPixels(0,0,320,480,GL_RGBA,GL_UNSIGNED_BYTE,&buffer);        CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &buffer, 320*480*4, NULL);    CGImageRef iref = CGImageCreate(320,480,8,32,320*4,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault,ref,NULL,true,kCGRenderingIntentDefault);    CGFloat width = CGImageGetWidth(iref);    CGFloat height = CGImageGetHeight(iref);    size_t length = width*height*4;    uint32_t *pixels = (uint32_t *)malloc(length);    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, 320*4, CGImageGetColorSpace(iref), kCGImageAlphaLast | kCGBitmapByteOrder32Big);    CGContextTranslateCTM(context, 0.0, height);    CGContextScaleCTM(context, 1.0, -1.0);    CGContextDrawImage(context, CGRectMake(0.0, 0.0, width, height), iref);    CGImageRef outputRef = CGBitmapContextCreateImage(context);    UIImage *outputImage = [UIImage imageWithCGImage:outputRef];        UIImageWriteToSavedPhotosAlbum(outputImage, nil, nil, nil);         CGContextRelease(context);    CGImageRelease(iref);    CGDataProviderRelease(ref);} 

4.

CGImageRef UIGetScreenImage();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];}

5.

(UIImage *)imageWithScreenContents{     CGImageRef cgScreen = UIGetScreenImage();     if (cgScreen) {         UIImage *result = [UIImage imageWithCGImage:cgScreen];         CGImageRelease(cgScreen);         return result;     }     return nil;} 

6.两张合成一张

- (UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2 {      UIGraphicsBeginImageContext(image1.size);      // Draw image1      [image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];      // Draw image2      [image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];      UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();      UIGraphicsEndImageContext();      return resultingImage;  }






0 0