【问题标题】:Why AVCaptureSession image is scaled?为什么 AVCaptureSession 图像被缩放?
【发布时间】:2014-04-11 22:29:31
【问题描述】:

我正在使用这个标准示例将视频从相机显示到 iPhone 屏幕。我可以看到视频,但它被放大了。当我使用标准 iPhone 相机应用程序时,我可以在图片上看到更多内容。

我很确定答案很简单,但我的英语似乎不足以做出正确的搜索词组。

-(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];
}

【问题讨论】:

标签: ios objective-c avcapturesession


【解决方案1】:

有很多可能的原因,第一个是关于你得到的帧的分辨率,AVCaptureSessionPresetHigh表示不同设备上的不同分辨率。获得帧后,它们应显示在预览层内。
AVCaptureVideoPreviewLayer 具有类似于 UIImageView 的纵横比模式,称为 -videoGravity
结合到不同 videoGravity 的帧的大小可以改变预览层显示它们的方式。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-05-27
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多