iPhone幾種截屏的代碼分享

openkk 12年前發布 | 27K 次閱讀 iPhone iOS開發 移動開發

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];
    

    // self.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. // get screen

  • (void)grabScreen { unsigned char buffer[3204804]; glReadPixels(0,0,320,480,GL_RGBA,GL_UNSIGNED_BYTE,&buffer);

    CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &buffer, 3204804, NULL); CGImageRef iref = CGImageCreate(320,480,8,32,3204,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault,ref,NULL,true,kCGRenderingIntentDefault); CGFloat width = CGImageGetWidth(iref); CGFloat height = CGImageGetHeight(iref); size_t length = widthheight4; uint32_t pixels = (uint32_t )malloc(length); CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, 3204, 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; }

在程序中如何把兩張圖片合成為一張圖片

  • (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;
    }</pre>

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!