Seb*_*arr 4 iphone camera objective-c avfoundation ios
我正在编写一个应用程序,根据照明条件自动打开iOS设备背面的手电筒.该应用程序呈现实时摄像机视图,但不记录视频.
我尝试过使用AVCaptureTorchModeAuto,但它似乎只是在捕捉会话开始时测量图像的亮度,并相应地设置了手电筒.无论相机图像的亮度如何,之后设置都不会改变.
捕获设备持续监控光照水平,并在必要时使用割炬.
适用于iOS 4.0及更高版本.
使用当前的API集,亮度采样仅在记录开始时完成.所以AVCaptureTorchModeAuto不能按预期工作.
现在讨论问题中讨论的用例:
可能性1: 使用后置摄像头进行亮度检测:
一旦火炬出现,对捕获的流的分析将无法分辨房间亮度的当前情况,因为火炬将导致化妆品亮度.
因此,为了获得真正的亮度值,必须要求及时切换开关,这在大多数情况下不是非常通用和方便的.
获得亮度值以决定是否启用Torch.
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL,
sampleBuffer, kCMAttachmentMode_ShouldPropagate);
NSDictionary *metadata = [[NSMutableDictionary alloc]
initWithDictionary:(__bridge NSDictionary*)metadataDict];
CFRelease(metadataDict);
NSDictionary *exifMetadata = [[metadata
objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy];
float brightnessValue = [[exifMetadata
objectForKey:(NSString *)kCGImagePropertyExifBrightnessValue] floatValue];
}
Run Code Online (Sandbox Code Playgroud)
可能性2: 使用前置摄像头进行亮度检测:
前置摄像头不允许使用手电筒.