Включить вспышку камеры перед съемкой?

Могу ли я программно включить вспышку на новом устройстве iPhone 4 перед съемкой -takePicture?

Я разрабатываю приложение для фотосъемки для iOS 4 и хочу включить вспышку до того, как пользователь сделает снимок, чтобы он мог заранее увидеть эффект вспышки.

Проблема, по-видимому, в том, что для того, чтобы вспышка оставалась включенной, вам нужно включить torchMode, а это возможно только в «режиме видео» (UIImagePickerControllerCameraCaptureModeVideo), в то время как вы можете задать UIImagePickerController до takePicture только когда он включен. «фоторежим» (UIImagePickerControllerCameraCaptureModePhoto).

Итак, следующее работает, но показывает только вспышку при съемке:

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    picker.showsCameraControls = NO;
    picker.navigationBarHidden = YES;
    picker.toolbarHidden = YES;

    picker.mediaTypes = [NSArray arrayWithObjects:@"public.image", nil];
    picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
    picker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;
    [self presentModalViewController:picker animated:YES];

И это тоже работает (показывает факел все время), но тогда я не могу сделать снимок.

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    picker.showsCameraControls = NO;
    picker.navigationBarHidden = YES;
    picker.toolbarHidden = YES;

    picker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeMovie, nil];
    picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;
    picker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;
    [self presentModalViewController:picker animated:YES];

Когда я пробую код toggleTorch, найденный здесь: Включите фонарик/вспышку на iPhone кажется, что в UIImagePickerController нет прямой видеотрансляции.

Эти UIImagePickerController и AVCaptureSession совместимы друг с другом? или вы должны выбрать либо одно, либо другое?

И кто-нибудь знает обходной путь, чтобы включить режим вспышки (или torchMode) и иметь возможность takePicture?


person Dirk van Oosterbosch    schedule 19.01.2011    source источник


Ответы (1)


Взгляните на сеансы WWDC 2010 (в частности, 409), где они раскрывают функциональность, подобную той, которую вы ищете.

По сути, вам нужно отойти от UIImagePickerController, если вы хотите выполнять эти пользовательские функции камеры и перейти к классам AVFoundation.

person bijanv    schedule 19.01.2011
comment
Другой момент заключается в том, чтобы светодиод вспыхивал в любом случае, кроме как при съемке (т.е. до или после съемки), вам нужно использовать фонарик (AVCaptureTorchMode), а не вспышку. - person bijanv; 20.01.2011
comment
Спасибо, этот указатель на этот сеанс был очень полезен для объяснения всего о структуре AVFoundation! Особенно код примера AVCam Demo делает все, что я хотел бы сделать (и даже больше). - person Dirk van Oosterbosch; 20.01.2011