为什么AVCaptureSession图像会缩放?

时间:2014-04-11 06:22:36

标签: ios objective-c avcapturesession

我正在使用此标准示例来显示从相机到iPhone屏幕的视频。我可以看到视频,但它是缩放的。当我使用标准iPhone相机应用程序时,我可以在图片上看到更多。

我很确定答案很简单,但似乎我的英语不够好,无法做出正确的搜索短语。

my app screenshot

-(void)viewDidLoad
{
    [super viewDidLoad];

    cameraPreview = [[UIView alloc] initWithFrame:CGRectMake(0,0,720,1280)] ;
    [self.view addSubview:cameraPreview] ;

    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    session.sessionPreset = AVCaptureSessionPresetHigh;

    CALayer *viewLayer = cameraPreview.layer;
    NSLog(@"viewLayer = %@", viewLayer);

    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

    captureVideoPreviewLayer.frame = cameraPreview.bounds;
    [cameraPreview.layer addSublayer:captureVideoPreviewLayer];

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    NSError *error = nil;
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
    if (!input) {
        // Handle the error appropriately.
        NSLog(@"ERROR: trying to open camera: %@", error);
    }
    [session addInput:input];

    [session startRunning];
}

1 个答案:

答案 0 :(得分:0)

有很多可能的原因,第一个是关于你得到的帧的分辨率,AVCaptureSessionPresetHigh表示不同设备上的不同res。获得框架后,它们应显示在预览图层中 AVCaptureVideoPreviewLayer的方面模式类似于名为UIImageView的{​​{1}} 组合到不同videoGravity的帧的大小可以改变预览层显示它们的方式。