ios - 如何指定视频录制的曝光、焦点和白平衡?

标签 ios camera avcapturedevice

我有一个使用默认参数拍摄视频的程序,当我移动相机时,曝光、对焦和白平衡会自动调整。我想在程序中添加 2 个按钮:LOCK 和 PRESET。当按下 LOCK 按钮时,曝光、对焦和白平衡将被固定,它们的值将被存储为用户设置。 PRESET 按钮用于对相机进行用户设置,以确保我们可以拍摄具有相同曝光、对焦和白平衡值的所有视频。

锁定部分很简单,我只需要改变模式,所以我想知道是否有任何方法可以获取和设置曝光、对焦和白平衡的值。

以曝光为例,默认情况下,曝光模式设置为AVCaptureExposureModeContinuousAutoExposure,也就是说,当我手持iPhone拍摄视频时,曝光会自动调整,以确保我们在明亮或黑暗的情况下都能清楚地看到场景环境。

AVCaptureDevice* pCaptureDevice = [self videoDeviceWithPosition:AVCaptureDevicePositionBack];
[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeContinuousAutoExposure];
[pCaptureDevice unlockForConfiguration];

当按下 LOCK 按钮时,我将 exposureMode 更改为 AVCaptureExposureModeLocked,因此当前曝光值将不再更改。

[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeLocked];
[pCaptureDevice unlockForConfiguration];

但是,如何获取按下按钮那一刻的曝光值呢?更重要的是,如何在按下 PRESET 时将曝光值设置回 AVCaptureDevice。

我在论坛里搜索,只找到Michael Grinich 的帖子:Accessing iOS 6 new APIs for camera exposure and shutter speed .我按照他的发现并尝试使用私有(private) API 来获取和设置 exposureGain 和 exposureDuration,但我发现在 AVCaptureExposureModeContinuousAutoExposure 模式下,当我将相机从黑暗环境移动到明亮(exposureGain = 1.0 和曝光持续时间 = {1, 30, 1, 0})。设置它们根本不会改变曝光。

[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeLocked];
[pCaptureDevice setManualExposureSupportEnabled:YES];
NSLog(@"exposure gain: %f", [pCaptureDevice exposureGain]);
[pCaptureDevice setExposureGain:3.0];
NSLog(@"exposure gain: %f", [pCaptureDevice exposureGain]);
[pCaptureDevice unlockForConfiguration];

谁能帮我解决这个问题?非常感谢!

最佳答案

我在 Accessing iOS 6 new APIs for camera exposure and shutter speed 上添加了一个可能对您有帮助的答案.我可以在这里添加更多细节...

手动设置焦点与我概述的设置曝光的结构完全相同。即:

#define AVCaptureFocusModeManual     3
NSError*    error = nil;
if ([captureDevice lockForConfiguration:&error]) {
    captureDevice.manualFocusSupportEnabled = YES;
    if ([captureDevice isFocusModeSupported:AVCaptureFocusModeManual]) {
        captureDevice.focusMode = AVCaptureFocusModeManual;
        // this is a value [0..1]
        captureDevice.focusPosition = ...;
    }
    [captureDevice unlockForConfiguration];
}

白平衡似乎没有像曝光和对焦那样的特殊模式。不要将 WhiteBalanceMode 设置为锁定,否则似乎您可以设置色温:

// this is also a value [0..1]
captureDevice.whiteBalanceTemperature = ...;

关于ios - 如何指定视频录制的曝光、焦点和白平衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14425655/

相关文章:

ios - 如何在 ScrollView 中隐藏和显示按钮?

ios - 在相机应用程序中单击使用按钮保存照片

android - 使用 camera.open() 时应用程序挂起/卡住 - 需要重启设备

android - 如何使android中 View 周围的区域变暗?

ios - 前置闪光灯亮度 iPhone

ios - ipod Touch 5g 上的应用程序不使用全分辨率([UIScreen mainScreen].bounds.height == 480.0)

ios - 如何切换自定义应用内键盘

iPhone 4 AVFoundation : Capture from front and rear cameras simultaneously

ios - 更改 NavigationItem 提示时出现奇怪的动画