2015-06-24 2 views
1

У моего приложения есть кнопка, которая должна сделать снимок экрана на экране, вызвав «takeSnapShot» (см. Код ниже). У меня есть два вида, и один из них - это выборщик, который я использую для камеры, поэтому на экране я вижу изображение, идущее с камеры, а рядом с ним - другой вид с изображениями.Можно ли сделать снимок комбинированных представлений, включая камеру?

Дело в том, что я захватываю экран, но он не фиксирует изображение, поступающее с камеры.

Кроме того, я думаю, что я визуализации view.layer но отладчик твердит>

«мгновенных снимков вид, что не было вынесено результаты в пустой снимок. Убедитесь, что ваш взгляд было вынесено по крайней мере, один раз перед моментальный снимок или моментальный снимок после обновления экрана. "

Любые идеи? Благодаря!

Это код:

#import "ViewController.h" 

@interface ViewController() 
@end 

@implementation ViewController 

UIImage *capturaPantalla; 


-(void)takeSnapShot:(id)sender{ 

    UIGraphicsBeginImageContext(picker.view.window.bounds.size); 
    [picker.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    capturaPantalla = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    UIImageWriteToSavedPhotosAlbum(capturaPantalla,nil,nil,nil); 

} 

ответ

1

Я сделал подобную функцию раньше, и использовал AVCaptureSession, чтобы сделать это.

// 1. Create the AVCaptureSession 
    AVCaptureSession *session = [[AVCaptureSession alloc] init]; 
    [self setSession:session]; 

// 2. Setup the preview view 
    [[self previewView] setSession:session]; 

// 3. Check for device authorization 
    [self checkDeviceAuthorizationStatus]; 

    dispatch_queue_t sessionQueue = dispatch_queue_create("session queue", DISPATCH_QUEUE_SERIAL); 
    [self setSessionQueue:sessionQueue]; 

=========================================== = Мой отсчет функция моментального снимка:

- (void) takePhoto 
{ 
    [timer1 invalidate]; 
    dispatch_async([self sessionQueue], ^{ 
     // 4. Update the orientation on the still image output video connection before capturing. 
     [[[self stillImageOutput] connectionWithMediaType:AVMediaTypeVideo] setVideoOrientation:[[(AVCaptureVideoPreviewLayer *)[[self previewView] layer] connection] videoOrientation]]; 

     // 5. Flash set to Auto for Still Capture 
     [iSKITACamViewController setFlashMode:flashMode forDevice:[[self videoDeviceInput] device]]; 

     AVCaptureConnection *stillImageConnection = [[self stillImageOutput] connectionWithMediaType:AVMediaTypeVideo]; 

     CGFloat maxScale = stillImageConnection.videoMaxScaleAndCropFactor; 
     if (effectiveScale > 1.0f && effectiveScale < maxScale) 
     { 
      stillImageConnection.videoScaleAndCropFactor = effectiveScale;; 
     } 

     [self playSound]; 
     // 6.Capture a still image. 
     [[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:[[self stillImageOutput] connectionWithMediaType:AVMediaTypeVideo] completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) { 

      if (imageDataSampleBuffer) 
      { 
       NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer]; 
       UIImage *image = [[UIImage alloc] initWithData:imageData]; 
       if(iPhone5 && [self.modeLabel.text isEqualToString:@"PhotoMode"]) { 
        UIImage *image1 = [image crop:CGRectMake(0, 0, image.size.width, image.size.height)]; 
        [[[ALAssetsLibrary alloc] init] writeImageToSavedPhotosAlbum:[image1 CGImage] orientation:(ALAssetOrientation)[image1 imageOrientation] completionBlock:nil]; 
       } else { 
        [[[ALAssetsLibrary alloc] init] writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:nil]; 

       } 
       self.priveImageView.image = image; 
      } 
     }]; 
    }); 
} 
+0

Это может быть лучше подход, хотя снимок должен содержать предварительный просмотр камеры и изображение спереди. то есть: автопортрет с изображением шляпы. Это сводит меня с ума! – MLBDG

+0

Также попробовал [этот вариант] (http://stackoverflow.com/questions/12248035/how-to-capture-photo-by-adding-overlay), но все равно получал те же результаты. – MLBDG

+1

Я поместил некоторые из своих занятий в свой github для вашей справки. Надеюсь, это полезно. https://github.com/htaiwan/CameraSnapShot.git –

Смежные вопросы