如何使用Flash模式打开相机



我正在开发一个简单的应用程序,其中我需要使我的相机闪存模式不仅在捕获图像时连续上保持。并且操作模式应为摄像机而不是视频记录。是否可以 ?如果是这样。请帮助我一些代码

您可以使用以下方法来打开和关闭相机。

- (void)toggleFlashlight
{
  AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
  if (device.torchMode == AVCaptureTorchModeOff)
  {
    // Create an AV session
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    // Create device input and add to current session
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
    [session addInput:input];
    // Create video output and add to current session
    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
    [session addOutput:output];
    // Start session configuration
    [session beginConfiguration];
    [device lockForConfiguration:nil];
    // Set torch to on
    [device setTorchMode:AVCaptureTorchModeOn];
    [device unlockForConfiguration];
    [session commitConfiguration];
    // Start the session
    [session startRunning];
    // Keep the session around
    [self setAVSession:session];
    [output release];
  }
  else
  {
    [AVSession stopRunning];
    [AVSession release], 
    AVSession = nil;
  }
}

您也可以使用以下方法以及显示相机的显示。

- (void) toggleFlashlight {
// check if flashlight available
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if ([device hasTorch] && [device hasFlash]){
        [device lockForConfiguration:nil];
        if (device.torchMode == AVCaptureTorchModeOff) 
        {
            [device setTorchMode:AVCaptureTorchModeOn];
            [device setFlashMode:AVCaptureFlashModeOn];
        }
        else 
        {
            [device setTorchMode:AVCaptureTorchModeOff];
            [device setFlashMode:AVCaptureFlashModeOff];
        }
        [device unlockForConfiguration];
    }
} 
}

用于Swift 4

func toggleFlash() {
    guard let device = AVCaptureDevice.default(for: AVMediaType.video)
        else {return}
    if device.hasTorch {
        do {
            try device.lockForConfiguration()
            if device.torchMode == AVCaptureDevice.TorchMode.on {
                device.torchMode = AVCaptureDevice.TorchMode.off
                    //AVCaptureDevice.TorchModeAVCaptureDevice.TorchMode.off
            } else {
                do {
                    try device.setTorchModeOn(level: 1.0)
                } catch {
                    print(error)
                }
            }
            device.unlockForConfiguration()
        } catch {
            print(error)
        }
    }
}

最新更新