2014-04-04 3 views
2

vuforia-sdk-ios-2-0-32를 사용하고 있습니다. 필자는 스크린 샷 (카메라 및 3D 콘텐츠 모두 포함) 촬영을 위해 아래 링크를 참조했습니다. https://developer.vuforia.com/forum/ios/vuforia-sdk-how-take-screenshots, https://developer.vuforia.com/forum/ios/take-screenshot. 하지만 내 코드는 카메라 이미지 만 가져 와서 앨범에 저장하지만 오버레이 콘텐츠 (3D 콘텐츠 또는 이미지)는 사용하지 않습니다.스크린 샷은 3D 콘텐츠를 가져 오지 않습니다

ARParentViewController.mm : AR_EAGLView.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); 

} 

:

eaglLayer.drawableProperties = @{ 

            kEAGLDrawablePropertyRetainedBacking: [NSNumber numberWithBool:YES], 

            kEAGLDrawablePropertyColorFormat: kEAGLColorFormatRGBA8, 

     }; 

답변

1

내 ImageTagetEAGlView에서이 방법을 사용는 3D 모델

- (void)savePhoto{ 

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

주와 함께 이미지를 촬영합니다 : 나는 Vuforia 4.0을 사용 중입니다.