我有一个程序可以使用默认参数拍摄视频,并且当我移动相机时会自动调整曝光、对焦和白平衡。我想在程序中添加 2 个按钮:LOCK 和 PRESET。按下 LOCK 按钮时,曝光、对焦和白平衡将被固定,它们的值将作为用户设置存储。PRESET 按钮用于设置相机的用户设置,以确保我们可以拍摄具有相同曝光、对焦和白平衡值的所有视频。
锁定部分很简单,我只需要更改模式,所以我想知道是否有任何方法可以获取和设置曝光、对焦和白平衡的值。
以曝光为例,默认情况下,exposureMode 设置为 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。我按照他的发现并尝试使用私有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];
有人可以帮我解决这个问题吗?首先十分感谢!