2014-10-06 3 views
1

Я разрабатываю приложение iPhone, в котором я должен использовать AVCaptureSession для захвата изображения с задней камеры. Каждый раз, когда приложение запускается, оно получает 2 значения от сервера, первым значением является свойство sessionCresureSession, а второе - GCRect для отсечения выходного изображения (координата этого прямоугольника соответствует разрешению выходного изображения).Получите разрешение выходного изображения перед захватом изображений с помощью AVCaptureSession

Теперь проблема заключается в том, что я должен «нарисовать» этот обрезающий прямоугольник на предварительном просмотре камеры, что означает, что мне придется сопоставить координату отсекающего прямоугольника с другой «правильной» координатой предварительного просмотра камеры (поскольку sessionPreset меняется каждый раз, когда приложение запускается). Я искал документацию Apple, но я не мог найти способ получить разрешение выходного изображения. Мне нужно это разрешение вывода, чтобы сделать отображение обрезающего прямоугольника.

Это код, где я начинаю AVCaptureSession в мой контроллер зрения:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //Capture Session 
    AVCaptureSession *session = [[AVCaptureSession alloc]init]; 
    session.sessionPreset = _sessionPreset; //this _sessionPreset varies each time my app starts 

    //Add device 
    AVCaptureDevice *device = 
    [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

    //Input 
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; 

    if (!input) 
    { 
     NSLog(@"No Input"); 
    } 

    [session addInput:input]; 

    //Output 
    AVCaptureStillImageOutput *output = [[AVCaptureStillImageOutput alloc] init]; 
    NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey,nil]; 
    [output setOutputSettings:outputSettings]; 

    [session addOutput:output]; 


    //Preview Layer 
    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
    UIView *myView = self.view; 
    previewLayer.frame = myView.bounds; 
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspect; 
    [self.view.layer addSublayer:previewLayer]; 

    //Start capture session 
    [session startRunning]; 
    //Now I want to draw the rectangle after the session starts 
} 

Заранее спасибо ребята :)

ответ