2

I'm using vuforia-sdk-ios-2-0-32. I referred below link for taking screenshot (including both camera and 3D content) . https://developer.vuforia.com/forum/ios/vuforia-sdk-how-take-screenshots , https://developer.vuforia.com/forum/ios/take-screenshot . But my code taking only camera image and save to Album but it's not taking withoverlay content (3D content or image).

ARParentViewController.mm :

-(void)screenshot:(id)sender{

 UIImage *outputImage = nil;

        CGFloat scale = [[UIScreen mainScreen] scale];

    CGRect  s = CGRectMake(0, 0, (768.0f) * scale, 1024.0f * scale);

 uint8_t *buffer = (uint8_t *) malloc(s.size.width * s.size.height * 4);

 glReadPixels(0, 0, s.size.width, s.size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

   CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, buffer, s.size.width * s.size.height * 4, NULL);

     CGImageRef iref = CGImageCreate(s.size.width, s.size.height, 8, 32, s.size.width * 4, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault, ref, NULL, true, kCGRenderingIntentDefault);

   size_t width = CGImageGetWidth(iref);

    size_t height = CGImageGetHeight(iref);

    size_t length = width * height * 4;

    uint32_t *pixels = (uint32_t *)malloc(length);

   CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * 4,

    CGImageGetColorSpace(iref), kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big);

   CGAffineTransform transform = CGAffineTransformIdentity;

        transform = CGAffineTransformMakeTranslation(0.0f, height);

        transform = CGAffineTransformScale(transform, 1.0, -1.0);

        CGContextConcatCTM(context, transform);

        CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), iref);

        CGImageRef outputRef = CGBitmapContextCreateImage(context);

   outputImage = [UIImage imageWithCGImage: outputRef];

       CGDataProviderRelease(ref);

        CGImageRelease(iref);

        CGContextRelease(context);

        CGImageRelease(outputRef);

        free(pixels);

        free(buffer);

    UIImageWriteToSavedPhotosAlbum(outputImage, nil, nil, nil);

}

AR_EAGLView.mm:

eaglLayer.drawableProperties = @{

                                    kEAGLDrawablePropertyRetainedBacking: [NSNumber numberWithBool:YES],

                                    kEAGLDrawablePropertyColorFormat: kEAGLColorFormatRGBA8,

      };
genpfault
  • 51,148
  • 11
  • 85
  • 139
user3496826
  • 101
  • 2
  • 14

1 Answers1

1

I used this method in my ImageTagetEAGlView to take image along with 3d model

- (void)savePhoto{

   UIGraphicsBeginImageContext(self.frame.size);
   [self drawViewHierarchyInRect:self.frame afterScreenUpdates:YES];
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}

Note: I am using Vuforia 4.0

Saqib Omer
  • 5,387
  • 7
  • 50
  • 71