zoukankan      html  css  js  c++  java
  • AVCaptureSession 照相时获取 AVCaptureVideoPreviewLayer尺寸

    http://stackoverflow.com/questions/14153878/avcapturesession-preset-photo-and-avcapturevideopreviewlayer-size


    I initialize an AVCaptureSession and I preset it like this :

    AVCaptureSession *newCaptureSession = [[AVCaptureSession alloc] init];
    if (YES==[newCaptureSession canSetSessionPreset:AVCaptureSessionPresetPhoto]) {
        newCaptureSession.sessionPreset = AVCaptureSessionPresetPhoto;
    } else {
        // Error management
    }

    Then I setup an AVCaptureVideoPreviewLayer :

    self.preview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height/*426*/)];
    CALayer *previewLayer = preview.layer;
    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];
    captureVideoPreviewLayer.frame = previewLayer.frame;
    [previewLayer addSublayer:captureVideoPreviewLayer];
    captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspect;

    My question is:
    How can I get the exact CGSize needed to display all the captureVideoPreviewLayer layer on screen ? More precisely I need the height as AVLayerVideoGravityResizeAspect make the AVCaptureVideoPreviewLayer fits the preview.size ?
    I try to get AVCaptureVideoPreviewLayer size that fit right.

    Very thank you for your help
    objective-c ios camera
    share|improve this question
        

        

    After some research with AVCaptureSessionPresetPhoto the AVCaptureVideoPreviewLayer respect the 3/4 ration of iPhone camera. So it's easy to have the right height with simple calculus.
    As an instance if the width is 320 the adequate height is:
    320*4/3=426.6
    share|improve this answer








    // Get your AVCaptureSession somehow. I'm getting mine out of self.videoCamera, which is a GPUImageVideoCamera
        // Get the appropriate AVCaptureVideoDataOutput out of the capture session. I only have one session, so it's easy.

        AVCaptureVideoDataOutput *output = [[[self.videoCamera captureSession] outputs] lastObject];
        NSDictionary* outputSettings = [output videoSettings];

        // AVVideoWidthKey and AVVideoHeightKey did not work. I had to use these literal keys.
        long width  = [[outputSettings objectForKey:@"Width"]  longValue];
        long height = [[outputSettings objectForKey:@"Height"] longValue];

        // video camera output dimensions are always for landscape mode. Transpose if your camera is in portrait mode.
        if (UIInterfaceOrientationIsPortrait([self.videoCamera outputImageOrientation])) {
            long buf = width;
            width = height;
            height = buf;
        }

        CGSize outputSize = CGSizeMake(width, height);

  • 相关阅读:
    js 笔记
    openstack笔记
    Nginx
    Nginx
    Nginx
    nginx 服务器篇
    Nginx 原理篇
    MySQL 视图、触发器、函数、存储过程
    day41
    MySQL 作业题及答案
  • 原文地址:https://www.cnblogs.com/allanliu/p/4173257.html
Copyright © 2011-2022 走看看